萌新的学习笔记,写错了恳请斧正。
目录
预处理指令就是C语言中的一些特定格式的用于辅助编译器预处理的指令,这些指令在编译时的预处理阶段就被处理,并不会被保留到汇编文件中。
预定义符号
首先是一些内置的预定义符号,这些符号可以直接使用,在预处理阶段就被替换为对应的其他内容
包括(注意前后都是两个下划线):
- __FILE__:替换为源文件的文件名(包括地址与后缀)
- __LINE__:替换为文件中此符号所在行的行号
- __DATE__:替换为文件被编译的日期
- __TIME__:替换为文件被编辑的时间
- __STDC__:如果编译器遵循ANSI C标准,这将被替换为1,否则未定义
预处理指令#define
#define定义的宏常量
#define可以在预处理时把程序中的某个字段直接替换为另一个字段,然后在继续编译
注意:
- #define之间可以嵌套
- #define的第一个字段(被替换字段)必须全连续(不能存在空白字符),而第二个字段可以存在空白字符甚至多行字符(需要续行符辅助)
- #define的定义不能产生循环
使用示例如下(输出100):
#include <stdio.h>
#define M 100
#define __p printf
#define PRINT __p("%d", M)
int main()
{
PRINT;
return 0;
}
注:如果不写替换字段,则默认替换为1
使用续行符扩展#define的功能
上面提到可以使用续行符来完成多行的替换,具体怎么操作呢?
其实很简单,只要正常分行,前面每一行的结尾都加上一个反斜杠即可(反斜杠后就是换行符,之间不能再有任何其他字符!!!),比方说:
#include <stdio.h>
#define DEBUG_PRINT printf("file:%s\nline:%d\ndate:%s\ntime:%s\n",\
__FILE__, __LINE__,\
__DATE__, __TIME__ \
)
int main()
{
DEBUG_PRINT;
return 0;
}
#define定义宏
#define指令还包含一个机制,就是宏定义功能
宏定义可以理解为一种另类的“函数”,可以进行多字段的替换
其声明方式为:
#define name(parament_list) stuff
// name是宏的名称
// parament_list是参数列表,类似于函数的参数列表
// stuff是替换内容
其功能就是将stuff中所有的与参数列表相同的字段替换为我们使用时输入的字段
比