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语言编程》

posted @ 2020-06-14 19:18  可口可乐嗨  阅读(216)  评论(0编辑  收藏  举报
levels of contents