预定义符号:一般用于做日志记录;
__FILE__ 路径 __LINE__ 行数 __DATE__ 日期 __TIME__ 时间
#define 定义符号和宏 (getchar() 和 assert() 都是宏);
宏:类似于函数,把参数替换到文本中称为宏定义,带上足够多的括号,宏不支持递归;
printf(“hello world”) 等价于 printf(“hello”” world”) //两个字符串一起可合并;
#变量名 = “变量名”
int a = 10;
#a表示“a” //转字符串;
#define cat(x,y)
int a2 = 10;
Printf(“%d\n”,cat(a,2));//10
带有副作用的表达式:++ -- ch=getchar();
#undef 移除宏定义
Linux中 gcc test.c -D SZ=100 //其中SZ是代码中未定义的宏,这样可以指定宏;
条件编译指令:预编译时处理
#ifdef
```
#endif
例如
For(i = 0; i<10; i++)
{
Printf(“%d\n”,i);
#ifdef __DEBUG__
Printf(“xxx”);
#endif
}
如果定义__DEBUG__
则
#ifdef __DEBUG__
Printf(“xxx”);
#endif
会参与编译,如果未定义,则不参与编译
#if 常量表达式
#elid
#else
#endif
其中:
#if define == #ifdef
#if !define == #ifndef
#pragma once 等价于 #ifndef #define #endif