代码改变世界

C语言学习路上点滴之一

2013-03-19 09:11  码农路上  阅读(356)  评论(4)    收藏  举报

对预处理器运算符##的理解:

1 #define paste(front,back) front##back
2 int main()
3 {
4     char *name1,*name2;
5     paste(name,2)="hello world";
6     printf("%s\n",name2);
7 }

##的作用是将两个形参front和back直接连接起来 ,即使front和back这两个是变量,在调用paste宏前都已经赋值,最后结果依然还是将"front"和"back"这两个字符串连接起来充当一个新的变量名.所以上面代码中paste(name,2)即代表name2的这个变量,因此上面代码等价于:

1 #define paste(front,back) front##back
2 int main()
3 {
4     char *name1,*name2;
5     name2="hello world";
6     printf("%s\n",name2);
7 }

最后打印结果为hello world;
那么##啥时候能派上用场呢?

我想它主要用于:当只有在运行时才能确定要调用哪个变量或者函数时,就可以利用##来动态地构造要调用的变量或者函数名称.