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- 宏的主要内容,如果未能解决你的问题,请参考以下文章

c语言宏定义

关于C语言宏定义输出

关于c语言宏定义

c语言中的“宏”是指啥?

单片机c语言宏定义有几种

C语言中,宏替换的替换规则