预处理是进行文本操作
预定义符号
printf("%s\n", __FILE__); //__FILE__进行编译的源文件
printf("%d\n", __LINE__); //__LINE__文件当前进行的行号
printf("%s\n", __DATE__); //__DATE__文件被编译的日期
printf("%s\n", __TIME__); //__TIME__文件当前被编译的时间
预处理指令:由#开头的都是预处理指令
比如:
#define #include #pragma pack(4)
宏定义:
如果定义宏是表达式时尽量带上()
比如:
#include <stdio.h>
#define square(x) x*x
int main()
{
//int ret = square(5);
//等价与 ret=x*x;
// //所以ret为25
int ret = square(5+1);
等价于5+1*5+1=11
printf("%d\n", ret);
return 0;
}
#把一个宏参数变成对应的字符串
例子:
#define PRINTF(X) printf("the value of "#X" is %d\n",X)
int main()
{
int a = 10;
int b = 20;
PRINTF(a);
//printf("the value of "a" is of %d\n",a);
PRINTF(b);
//printf("the value of "b" is of %d\n",b);
return 0;
}
##可以把位于它两边的符号合成一个符号。
#undef 移除一个宏指令
条件编译:
1.#if 常量表达式
//......
#endif
常量表达式为真编译,否则不编译
printf("%d\n", arr[i]);
如果_DEBUG_定义了则编译 printf("%d\n", arr[i]);语句,否则不编译。
#include <stdio.h>
#define _DEBUG_
int main()
{
int arr[10] = {0};
int i;
for (i = 0; i < 10; i++)
{
arr[i] = i;
#ifdef _DEBUG_ //条件编译
printf("%d\n", arr[i]);
#endif
}
return 0;
}
2.多分支条件编译