[C++ rudiment]关于在表达式前加#

先看下面的程序例子:
#include <iostream>
using namespace std;

#define P(Ex) cout<<#Ex<<":"<<Ex<<endl;
int main()
{
    
int a = 0,b = 1;
    P(a
+b);
    
return 0;
}

输出为:
a+b:1
在预定义处可以看到#Ex这样的字眼,什么意思呢?
解释如下:
这是一种被称为字符串化的预处理器特征(在表达式前用一个#实现),其作用是得任何一个表达式并把它转换成为一个字符数组。

我们在这里可以很好玩的把在预定义命令中的#Ex理解成一个字符数组的首地址,于是可以有下面的程序:

#include <iostream>
using namespace std;

#define P(Ex,i) cout<<#Ex[i]<<endl;
int main()
{
    
for(int i = 0;i < 7;++i)
        P(wangbin,i);
    
return 0;
}

输出为:
w
a
n
g
b
i
n
注:这种字符串化只能在预定义语句中才有效,放在其它地方是没有用的,编译不通过。

posted on 2009-06-15 10:05  笔记  阅读(246)  评论(0编辑  收藏  举报

导航