C- 宏
Posted marton
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C- 宏相关的知识,希望对你有一定的参考价值。
宏
概念
#开头的是编译预处理指令
用#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语言编程》
以上是关于C- 宏的主要内容,如果未能解决你的问题,请参考以下文章