1.c++中#用于把转换成字符串
#define T(A) A//没有使用#
using namespace std;
int main()
{
cout<<"T(2): "<<T(2)<<endl;
cout<<"T(10.5): "<<T(10.5)<<endl;
cout<<"T(15.5f): "<<T(12.5f)<<endl;
cout<<"T('d'): "<<T('d')<<endl;
cout<<"T(hello): "<<T("hello")<<endl;
}
编译器只是单纯的把T(A)换成A
#define T(A) #A //使用的# 编译器将以字符串的形式用A替换T(A)
using namespace std;
int main()
{
cout<<"T(2): "<<T(2)<<endl;
cout<<"T(10.5): "<<T(10.5)<<endl;
cout<<"T(15.5f): "<<T(12.5f)<<endl;
cout<<"T('d'): "<<T('d')<<endl;
cout<<"T(hello): "<<T("hello")<<endl;
}
在编译前编译器将在A换成"A"用来替换T(A)
1.2宏定义中字符串中#A '#A' 与"#A"的区别
using namespace std;
#define TEXT1(A) cout<<"This is #A"<<endl;
#define TEXT2(A) cout<<"This is '#A'"<<endl;//字符串中#A在''内
#define TEXT3(A) cout<<"This is "#A""<<endl;//字符串中#A在""内
int main()
{
TEXT1("hello");
TEXT2("hello");
TEXT3("hello");
}
可知宏定义当#A以字符串形式存在于字符串中可以达到以字符串形式输出
即#define TEXT(A) cout<<"This is "#A""<<endl;与#define TEXT(A) cout<<"This is "<<#A<<endl;是等价的
2 c++中的##可用于粘合宏参数 但粘合而成的关键字必须是合法的。举例
using namespace std;
#define TEXT(a) a##cd
int main()
{
cout<<TEXT(m)<<endl;
}
//会报错 粘合之后为mcd 而mcd我们没有定义并且c++也没有内置该标识符
//可以定义mcd 这样就不会报错了 如下
using namespace std;
#define TEXT(a) a##cd
int main()
{
int mcd = 100;
cout<<TEXT(m)<<endl;
}
//会输出100;
当然 也可以粘合成c++中的内置标识符 如 cout可由c##out粘合而成
using namespace std;
#define TEXT(a) a##out
int main()
{
TEXT(c)<<"hello"<<endl;//c与out粘合成cout
}
##也可用于粘合常量 但必须合法
#define TEXT(a,b) a##b
int main()
{
cout<<TEXT(123,456)<<endl;//输出123456
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)