c中的宏及预定义符##和#细析

宏,单凭字面意思,我们无法根据汉语意思而推断其在计算机术语中大概何意。但现代计算机技术的发展丰富了其原本的意思。现在,我给出其意思:c语言(及以后的c++等)常用的一种为了避免函数调用而直接以代码替代宏名的替换模式。

 

为了进一步理解宏需掌握以下概念:

宏展开:预编译时用宏名所对应的代码直接代替源文件中各处出现的宏。例如:#define max(a,b) return ((a)>(b))? a : b

 

宏展开以为这源文件中所有出现 max(a,b) 的地方被替换成return ((a)>(b))? a : b。宏展开的好处是节省了函数调用压栈出栈的系统开销,提高程序运行速度。

 

宏展开何时进行:宏是编译器在预编译时自动完成的,不会再运行期间进行,运行期间已经是可执行的目标文件了。

 

 

宏符##和#

##和#只能在预定义语言中使用,即只能在#define #if等少数几个宏定义语句中使用。在通常的常规代码中会报错。

##是连接符,可以直接将两个变量名连接成一个变量名。如:

#define paste(a,b) a ## b
 int aa =1;
 int b =2;
 int aab=3;
 printf(":=%d",paste(aa,b));

 

将输出:=3

 

而#是将变量名字符串化。如

#define printout(n) printf(#n"=%d",n)

调用printout(n)等价于printf("n""=%d",n)

 

宏定义时代码超过一行时,在待续的代码后加"/",注意斜杠方向。并且,不能带任何注释,否则,编译出错。举例为:

#define swap(c,d) {/
 int t;/
 t = c;/
 c = d;/
 d = t;/
 }

 

最后一行可不再加''/".

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值