变量命名||Gcc编译||运算符基础

变量的命名规则

1.变量名不能以数字开头,否则语法错误;
2.不能以关键字作为变量名,否则语法错误;
3.变量命名时需要表达出变量含义;为了使变量名有意义,通常情况下我们使用英文取名方式;
4.可以使用下划线开头:通常情况下为了区分两个含义非常接近的变量就会为其中一个用下划线开头。通常将系统中存在的账号用下划线开头(登录账号密码时);
5.当我们想为拥有复合含义的数据声明的变量的时候,例如张三的身高,李四的体重:
①:驼峰命名法:int zhangsanHeightCm =180;
②:下划线命名:int lisi_weight_kg = 100;
两种方法都可以,但在同一程序中不要混合出现;

Gcc编译

共分为四个流程:gcc可以选择阶段性编译
假设需要编译的文件名为demo.c
1.预处理阶段: gcc -E demo.c -o demo.i
①:头文件展开
使用函数之前,也必须对函数进行声明;在过往的使用printf函数的程序中,printf函数的声明在stdio.h这个头文件中,头文件在预处理阶段会被gcc展开,就是将头文件中的所有内容复制粘贴到当前代码中。
②:简单宏替换
什么是宏:宏即一个替换指令,即变身,=。
宏的写法:#define 宏名 被替换的内容
参与编译的是目标内容,若出现语法错误,错误在于被替换的内容,注意给宏的内容加括号,注意优先级问题。
还有一种宏叫带参宏,它可以将传入的参数替换成与该参数有联系的其他形式,
如#define F(x) (x)*(x)
与宏定义类似,系统中还有另一个define,即类型声明typedef,专门为一个数据类型取一个别名,typedef int io;
typedef与define的区别:
一:define是条指令,无视语法正确与否;typedef是条语句,需要保证语法正确;
二:define什么都能换,typedef只能替换数据类型;
三:define实际参与编辑的是目标内容,typedef实际参与编译的是别名
typedef long long int lli;
lli e = 30;
人为规定所有的宏必须全部大写,为了让读代码的人能区分出这个单词是个变量还是个宏
③:去注释
一:行注释:"//",能够将当前行全部设置为注释
二:段注释:"/** */",能够将/ **/里的内容全设置为注释,gcc预处理的时候将注释全部删除,不参与编译
④:上标记
为每一行代码标记上源文件的实际位置,以便debug时找到实际位置
2.编译阶段:gcc -S demo.i -o demo.s 将预处理好的文件编译成汇编文件
也可以 gcc -S demo.c -o demo.s将源文件编译成汇编文件
编译过程是整个gcc中最重要的过程,它会判断代码中的词义、语义即语法,所有的语法错误会在这一步被体现。
汇编文件是直接操作内存的语句
3.汇编阶段
gcc -c demo.s -o demo.o将汇编文件汇编成二进制文件
或gcc -c demo.c -o demo.o
4.链接阶段:gcc demo.o -o demo将demo.o链接上动态库与静态库,形成可执行文件demo
我们可以简单的发现从二进制文件到可执行文件,他们都是二进制文件,但是可执行文件却比二进制文件大出很多,大出来的部分就是动态库与静态库:存放了标准库函数的可执行文件的二进制文件。
分析:所有的库函数,都会被编译到二进制文件阶段,形成.o文件,然后库文件就可以包含庞大数量的.o文件。注:这里只会链接标准动态库与静态库,如果一个函数不在标准动态库或静态库中,则此时需要手动链接该函数的库,使用:-l+库名(-lm即-l math)以硬链接的方式链接

在声明语句中表示数据类型,放在地址前表示取值。取一次*,少一个*
使用指针的目的在于访问值,相当于一个链接,即更改此值与之相连的值也更改了。
一个指针无论指向多大的内存空间,它只能指向该段内存的首地址。一个字节一个地址,指针是模块化取值(根据数据类型确定一次性取字节的大小)。例:
一个int四个字节,一个指向int型的指针存储的是首地址(共四个地址),*p时一次性取4个地址(即模块化取值)

运算符基础

单目、双目、三目
有多少对象参与运算就有多少目
1.算数运算符:+ - * / %
/:就是除法运算中的取商,除数不能为0(否则浮点不存在,核心已转储)
%:除法运算中的取余,两个参与运算的数据必须是整型(对浮点型数据进行强制类型转换(int))
能看成表达式都看成表达式
数据类型不同但可兼容取精度高的
2.赋值运算符= += -= …,赋值运算符不构成表达式,等号右侧必须可读,等号左侧必须可写;左值运算右值后写入左值。由于赋值运算符优先级最低,所以,先计算右边再赋值给左边。常量不可写,表达式也不可写,即只能作为右值。
计算机判断标准:以0判断为假,非0判断为真;
计算机用来表述真假的标准:0表达为假,1表达为真。
3.比较运算符>,<,>=,<=,==,!=
关于浮点型数据的比较,注意确认精度等级,尤其在是否相等时。
例如:double a =3.14,b=3.14;
判断浮点型是否相等的正确方式:(a-b > -0.0000001) && (a -b < 0.0000001)
4.自增运算符++ – 右结合,把值赋给表达式
int a =2,b=3;
a+++b+++a++ (a++ + b++ + a++); a+++b+b++(a++ +b + b++)注:++的优先级高于+,++是单目,+是双目运算符。
2+3+3+4=a=12,b=4
5×(12+4+4)=b=100 a=13

5.逻辑运算符:与&&、或||、非!, !的优先级最高, && 与 ||处于同一优先级,*的优先级低于++,高于逻辑运算符,除去括号,最高优先级是.和->
6.三目运算符:( ? : ) ascii码中10表示\n换行,13表示\r回车把光标移至行首
7.位运算符
①:按位与 & :每一位都为1结果为1,只要有0结果为0
②:按位或 |
③:按位取反(单目)~: chmod中,打开权限用|(开灯),关闭权限(关灯)用& ~r(取反与)
例:chmod u-w demo.c
0000 0111 0000 0111
0000 0100 1111 1011 0000 0011
④:按位异或 ^(要按补码运算):不同为1,相同为0;0与任何数异或等于本身,1与任何数异或使之翻转。
⑤:左移、右移 << , >>: 1<<2,二进制中向左移动2位 (二进制左移一位乘以2,右移一位除以2)
优点:算数运算符的效率是最高的,中间变量法的效率较低因为要开辟内存。
中间变量法的优点:安全、稳定。

周志航定理(异或三角定理也称为一家三口定理):A异或(^)B得到C,这三个数称为异或三角数,其中任意两个数异或得到第三个数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值