第1个回答 2015-07-12
宏定义分类: (1)不带参数的宏定义 形式: #define 宏名 [宏体]功能:可以实现用宏体代替宏名使用实例: #define TRUE 1作用:程序中多次使用TRUE,如果需要对TRUE的值进行修改,只需改动一处就可以了 (2)带参数的宏: #define 宏名 ( 参数表) [宏体] 宏定义作用: (1)方便程序的修改 上面的#define TRUE 1就是一个实例 (2)提高程序的运行效率 宏定义的展开是在程序的预处理阶段完成的,无需运行时分配内存,能够部分实现函数的功能,却没有函数调用的压栈、弹栈开销,效率较高
(3)增强可读性 这点不言而喻,当我们看到类似PI这样的宏定义时,自然可以想到它对应的是圆周率常量 (4)字符串拼接 例如:#define CAT(a,b,c) a##b##c main(){ printf("%d\n" CAT(1,2,3)); printf("%s\n", CAT('a', 'b', 'c');} 程序的输出会是: 123abc (5)参数转化成字符串 示例: #defind CAT(n) "abc"#n main(){ printf("%s\n", CAT(15));} 输出的结果会是abc15 (6)用于程序调试跟踪常见的用于调试的宏有,_ L I N E _,_ F I L E _,_ D A T E _,_ T I M E _,_ S T D C _
(7)实现可变宏
举例来说:
#define PR(...) printf(_ _VA_ARGS_ _)