【gcc编译】将代码转换成机器能识别的机器语言(一般是二进制)
四步编译过程
[1]预处理:展开头文件、删除无用注释、替换宏定义等
命令1:gcc -E hello.c -o hello.i
[2]编译:检查语法错误,有错报错,无错误转成汇编语言,生成汇编文件
命令2:gcc -S hello.i -o hello.s
[3]汇编:将汇编文件转换成二进制文件
命令3:gcc -c helllo.s -o hello.o
[4]链接:链接库文件,最终生成为机器能识别的可执行的文件
命令4:gcc hello.o -o hello
【词法符号】程序设计语言中由若干个字符组成的有意义的最小的语法单位
分类:关键字、标识符、运算符、标点符号、分隔符
[关键字]由系统预定义的具有特殊功能的词法符号,记32个
分类:
存储类型:auto(自动型)、static(静态型)、extern(外部引用)、register(寄存器)
数据类型:char、short、int、long、float、double、signed、unsigne
构造类型:struct(结构体)、union(共用体)、enum(枚举)
选择结构:if、else、switch、case、default
循环结构:for、while、do、goto、break、continue
其他 : void(空类型)、typedef(重定义)、volatile(防止编译器优化)、const(只读修饰)、sizeof(计算数据所占内存大小,用得多)、return(返回值,函数遇到即结束)
[标识符]用来表示变量、函数、用户自定义的项目名称(hello.c、string.c等)
命名规则:
1、由数字、字母、下划线组成
2、开头不能是数字
3、不能和关键字重复
4、自己看到名字能看懂
[运算符]
1、算术运算符
+ - * / % ++ --
/:整数相除,向下取整,输出数
int a = 5/2; //2
float b = 5/2; //2.000000
float c = 5/2.0; //2.500000
%:只能用于整数运算,输出余数
10%3 == 1
15%10 == 5
如:
[1]123取百位、十位、个位
百位:123/100 == 1
十位:123/10%10 == 2
个位:123%10 == 3
[2]2345
千位:2345/1000 == 2
百位:2345/100%10 == 3
十位:2345/10%10 == 4
个位:2345%1000 == 5
++:自加,注意++的前后位置,来判断先运算还是先自加
[1]赋值运算:
int a = 3;
int b = a++; //b=3,a=4,++在后,先赋值后自加1
int b = ++a; //b=4,a=4,++在前,先自加后赋值
[2]打印语句
int a = 3;
printf("%d\n",a++); //3,++在后,先打印后自加
printf("%d\n",++a); //4,++在前,先自加后打印
[3]独立成句
int a = 3;
a++; //4,a = a+1;
++a; //4,a = a+1;
注意:a++不等同于a+1
--:同理
2、逻辑运算符
&&: 逻辑与,全真则真,一假则假
|| : 逻辑或,一真则真,全假则假
!: 逻辑非,非真则假,非假即真截断法则:
[1]逻辑与运算中,只要前面有一个为假,则后面表达式不执行
[2]逻辑或运算中,只要前面有一个为真,则后面表达式不执行
3、位运算符
& | ~ ^ << >>
&:位与 全1则1,有0则0
|:位或 有1则1,全0则0
^:异或 不同为1,相同为0
[码制]
~:取反 0变1,1变0正数的源码、反码、补码都是本身;负数的源码是本身、反码是除了符号位以外取反、补码是反码+1
负数以补码的形式存放在计算机中
<<:左移,左移几位右边补几个0
4、关系运算符
> < == != >= <=
5、赋值运算符
= += -= *= /= %=
6、三目运算符
表达式1?表达式2:表达式3
执行顺序:先判断表达式1是否成立,成立执行表达式2,反之执行表达式3
运算符优先级
单目运算符 ! ~ ++ --
算术运算符 * / % + -
移位运算符 << >>
关系运算符 < <= > >= == !=
位与运算符 &
异或运算符 ^ |
逻辑运算符 && ||
条件运算符 ?:
赋值运算符 = += *= /= %= ...
口诀: 单算移关与 异或逻条赋
从右向左单条赋
【标点符号】
分号,逗号,大括号,小括号,中括号
【分隔符】
换行,TAB,空格
【变量】在程序运行中,可以发生变化的量
定义格式:存储类型 数据类型 变量名
int a
名称 字节数(32位) 取值范围
char 字符型 1字节 -2^7 ~ 2^7-1
short 短整型 2字节 -2^15 ~ 2^15-1
int 整型 4字节 -2^31 ~ 2^31-1
long 长整型 4字节 -2^31 ~ 2^31-1
float 单精度浮点型 4字节 有效数据位数6~7位
double 双精度浮点型 8字节 有效数据位数15~16位
【全局变量和局部变量区别】
全局变量 局部变量
定义位置 函数外部 函数内部
初值 未赋初值时为0 未赋初值时为随机值
存储位置 全局区 栈区
生命周期 随程序结束而结束 随函数结束而结束
作用域 作用于整个程序 作用于函数内部