计算机系统的基本架构
c语言的32个关键字
Enum: 枚举, 能穷举尽的类型。
Register: 修饰一个变量, 让这个变量直接存到寄存器里面。
signed: 表示有符号
unsigned: 无符号
void: 表示空类型
9 种控制语句:
34中预算符号:
1 #include <stdio.h> // #关键标识符,表示引入头文件; include: 引入头文件关键字 stdio.h系统标准输入,输出库对应的头文件,给prinf函数服务的 2 3 // <>:表示系统库函数 ,“”表示用户自定义的库函数#include"XXX.h" 4 5 int main(void) //int 表示函数返回值整型数据, main 函数名, 程序的唯一入口,有且只有一次。void,表示函数无需传参 6 { // 函数体起始位置 7 printf("hello world"); 8 system("pause"); //调用system函数实现暂停功能 9 return 0; //返回当前函数调用值, 要和main 函数的返回值一一对应 10 }
如何使用gcc, gcc 编译命令 gcc helloworld.c -o hellworld.exe 就把helloworld.c 编译成helloworld.exel了
gcc 编译的几个步骤
1. 预处理 gcc -E xxx.c -o xxx.i , 不检查错误, 包括语法错误, 及时有错误,会提示你,但是任然会生成xxx.i
(1)头文件展开,比喻说把stdio.h 展开, 不检查语法错误,可以展开任意文件
(2)宏定义替换, 将宏名字, 替换成宏的值,即在预处理阶段就替换宏定义的值
(3)替换注释 , 将注释替换成空行
(4)展开条件编译 ,根据条件来展开指令
#include<stdio.h> #define PI 3.14 int main(void) { #ifdef PI printf("already defined PI\n"); // 如果前面定义了预处理变量PI, 那么就执行这个printf语句,由于前面定义了PI, 所以在预处理的时候会打印already defined #endif // PI printf("this is helloworld\n"); return 0; }
2. 编译
gcc -S xxx.i -o xxx.s
(1) 将c程序翻译成汇编指令
(2) 逐步检查语法错误, 这也是编译中最耗时的步骤。 如果有语法错误,是不会出现xxx.s 文件的。
3. 汇编 , 生成二进制文件
gcc -c xxx.s -o xxx.o
(1) 将汇编指令翻译成对应的二进制编码
4. gcc xxx.o -o xxx.exe
(1) 数据段合并
(2)数据地址回填
(3)库导入