码迷,mamicode.com
首页 > 其他好文 > 详细

C- 宏

时间:2020-06-14 20:17:32      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:部分   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语言编程》

C- 宏

标签:部分   deb   adt   ret   组合   文本替换   开始   替换   error   

原文地址:https://www.cnblogs.com/marton/p/13125311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!