[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;
}
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;
}
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
注:这种字符串化只能在预定义语句中才有效,放在其它地方是没有用的,编译不通过。
我没有什么雄心壮志,我只想给自己和关心自己的家人和朋友一个交代,仅此而已。