看Uboot发现了这个语法,自己看过7-8本的C语言的书,貌似都没有说 -v-
首先感谢嵌入室群的麦田守望者朋友的指点,总算搞明白这个语法了。
原理:
##表示连接,比如 a##b 就等价与 ab ,注意不是 "ab"(区别于#)
#define test(a) a##b; 这里先会替换a,再连接,比如 test(int),a##b 就等价与intb
平台是 ubuntu 8.10 ,GCC 版本 4.3.2
下面是实验代码,保存为 app.c
#include <stdio.h>
#define change(a,val) \ a##_device = val
int main() { int etual_device=10; change(etual,20); printf("\nresult : %d \n",etual_device); return 0; }
|
运行结果:
./app
result : 20
程序解释:
定义一个 etual_device 的变量,并且初始化为 10
调用一个 宏处理,看调用后的数值有没有变化,事实上是有变化的,已经变成20了。
#define change(a,val) \
a##_device = val
change(etual,20) 调用之后, a 先被 etual 代替,然后和后面的_device合并
也就是宏替换之后变成
etual_device = 20
阅读(1074) | 评论(0) | 转发(0) |