转:C语言中 #和##的运用

#include <stdlib.h>
//在#define中,标准只定义了#和##两种操作。
//#用来把参数转换成字符串,
//##则用来连接两个前后两个参数,把它们变成一个字符串。
//如果#或##后的参数本身也是一个宏的话,#或##会阻止这个宏的展开
// 在C语言中字符串中的二个相连的双引号会被自动忽略
#define parser(n) printf("token"#n"=%d\n",token##n)
int main()
{
int token9=10;
parser(9);
return 0;
}
//output:
//token9=10

 

#define INIT_LED1()      do { LED1 = LED_OFF; IO_DIR_PORT_PIN(1, 0, IO_OUT); P1SEL &= ~0x01;} while (0)
#define IO_DIR_PORT_PIN(port, pin, dir) \
do { \
if (dir == IO_OUT) \
P##port##DIR |= BM( pin ); \
else \
P##port##DIR &= ~BM( pin ); \
}while(0)
#define BM( b ) ( 0x01 << ( b ))



posted @ 2012-03-20 16:16  云说风轻  阅读(440)  评论(0编辑  收藏  举报