Chinaunix首页 | 论坛 | 博客
  • 博客访问: 595754
  • 博文数量: 99
  • 博客积分: 5128
  • 博客等级: 大校
  • 技术积分: 1538
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-27 19:40
文章分类

全部博文(99)

文章存档

2012年(3)

2011年(5)

2010年(4)

2009年(31)

2008年(56)

分类: LINUX

2008-11-28 23:07:34

看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
阅读(1027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~