加入CSDN是出于记录,希望有不足之处多加指正。
1、预处理
C语言程序在编译的时候分为4个步骤:
第一步叫预处理:主要工作把#开头的语句先展开。所以说所有的#号开头的语句并不属于C语言的语法范畴。
1、头文件 #include
2、定义宏 #define
3、取消宏 #undef
4、条件编译 # if ,# ifndef, #ifdef ,#else ,#elif ,# endif
5、显示错误 #error
6、修改文件名及行号 #line , #file
7、向编译器传输指令 #progrma
语法:
- 每一个逻辑行都只能出现一个预处理的指令,如果需要用到多个物理行可以使用反斜杠来链接 \
- 预处理是整个编译过程中的第一步:预处理 -->汇编–>链接
- 可以通过编译选项 -E 来查看预处理的结果
$gcc file.c -o file.i -E // 通过 -E 选项得到预处理后的文件 enum.i
2、宏定义
宏(macro)实际上就是要给字符串,在源码经过预处理后就被替换到文件中。
#define PI 3.14
int main()
{
printf("%f\n ", PI);
}
当前的PI 就是一个宏,一般来说我们习惯使用全大写的字来表示宏,语法上并没有约束必须使用大写。PI 只会出现在你的源代码中,预处理过程中以及被完整地替换掉了。
作用:
- 提高程序地可读性,使用一个有意义的单词来表示一个无意义的数字/ 一个很长的路径/ 名字。
- 使得程序迭代/ 修改某些值更加方便,只需修改一个地方,程序中所有用到该宏的地方都会被修改,不需要一个一格的找出来并修改。
- 提高程序的运行效率,如果使用宏函数来替换比较简单而且重复性的函数可以使得程序的效率提高。
3、无参宏
// 自定义宏
#define PI 3.14
#define LCD_SIZE 800*480*4
int main()
{
printf("pi:%f\n" , PI);
mmap(NULL, LCD_SIZE,...... ); // #include <sysmman.h>
mmap(NULL, 800*480*4,......);
}
处理我们自己定义的宏以外系统也有一些预定义的宏
#define NULL ((void *)