标签:部分 deb adt ret 组合 文本替换 开始 替换 error
#开头的是编译预处理指令
用#define来定义一个宏
格式:#define <name> <value>
注意:
结尾没有分号,因为不是c语句;
名字必须是一个单词,值可以是多种东西
在C语言的编译器开始编译之前,编译预处理程序(cpp)会把程序中到名字换成值
完全的文本替换
可以用gcc —save-temps打印出宏替换后的文件
如果一个宏的值中有其他宏的名字,也会被替换
如果一个宏的值超过一行,最后一行之前的行末需要加\
宏的值后面出现的注释不会被当作宏的值的一部分
#define _DEBUG
这类宏用于条件编译,后面其他的编译预处理指令来检查这个宏是否已经被定义过了
__LINE__
__FILE__
__DATE__
__TIME__
__STDC__
#define cube(x)((x)*(x))
宏可以带参数
#define RADTODEG(x)(x*52.333)
#define RADTODEG(x)(x*23.888)
整个值要括号
参数出现的每个地?都要括号
#defifine RADTODEG(x) ((x) * 57.29578)
可以带多个参数
#defifine MIN(a,b) ((a)>(b)?(b):(a))
也可以组合(嵌套)使?其他宏
#defifine PRETTY_PRINT(msg) printf(msg);
if (n < 10)
PRETTY_PRINT("n is less than 10");
else
PRETTY_PRINT("n is at least 10");
在?型程序的代码中使??常普遍
可以?常复杂,如“产?”函数
在#和##这两个运算符的帮助下
宏的缺点:不会做参数检查, 部分宏会被inline函数替代
1)条件编译
2)error
参考资料:《翁恺C语言编程》
标签:部分 deb adt ret 组合 文本替换 开始 替换 error
原文地址:https://www.cnblogs.com/marton/p/13125311.html