一、预编译
1、宏定义
a、定义宏
#define 宏名 宏体
表示用宏名代替宏体,宏体可能没有,只做字符替换,不分配内存空间;
b、取消之前定义的宏;
#undef 宏名
宏定义不是C语句,故没有分号
2、带参数宏
#define 宏名(参数表) 宏体
如
#define S(a,b) a*b
其中S后面不能有空格。
在带参数的宏定义中,形参不分配内存单元,仅仅是字符替换,故不需要类型定义,不占用运行时间。
二、条件编译
如果为真,编译什么,否则编译什么;
#if
……
#elif
……
#endif
或者
如果宏定义了什么,编译什么,否则怎么怎么样
#ifdef 表示符
……
#else
……
#endif
三、其他
1、#error 指令强制编译程序停止编译
用法 #error error_message ;
用于预处理时如果发生某个错误,输出对应错误信息。
2、defined 用于确定是否定义了某宏名;
用法 #if defined MY等同于#ifdef MY
3、“#”称为字符串化的操作符
如#I like C 转为“I like C”
4、”##”可以把两个独立字符串连成一个字符串;
如
#define SORT(x) sort_function##x
在编译时,通过如x=3或者SORT(3),可知调用sort_function3
5、#enum 关键字说明的常量由编译程序自动生成。