C++宏的高级用法
#ifndef__GNUC__#error编译器为g++,windows下,好像没有把##生成的新字符串当成一个宏处理#endif#defineconn(x,y)x#y//x必须是一个字符串,使用时,conn("2",3),而不能是conn(2,3),3可以是任何类型的字符串//##有两种用法,一种是字符串连接,另一种是把连接生成的字符串当成一个新的宏//新宏必须存在//用##连接中参数中包含已定义的宏时,宏不会展开#defineSTRtest#definehello(x,y,z)x##y##z//第一种用法cout<<hello(1,2,3)<<endl;//输出123//第二种用法#definexyz333cout<<hello(x,y,z)<<endl;//即xyz这个宏必须存在,然后输出333cout<<hello(STR,y,z)<<endl;//STR不会展开
//测试程序#include<iostream>usingnamespacestd;#ifndef__GNUC__#error编译器为g++,windows下,好像没有把##生成的新字符串当成一个宏处理#endif#defineconn(x,y)x#y//x必须是一个字符串,使用时,conn("2",3),而不能是conn(2,3),3可以是任何类型的字符串//##有两种用法,一种是字符串连接,另一种是把连接生成的字符串当成一个新的宏//新宏必须存在//用##连接中参数中包含已定义的宏时,宏不会展开//##连接时,要么全是数字,要么,连接生成的字符串必须是已经定义的宏#definehello(x,y,z)x##y##zintmain(){cout<<conn("2",3)<<endl;//输出23//第一种用法cout<<hello(1,2,3)<<endl;//输出123//cout<<hello(a,2,3)<<endl;//会报错,看起来,g++只支持第二种用法//第二种用法#definexyz333cout<<hello(x,y,z)<<endl;//即xyz这个宏必须存在,然后输出333//cout<<hello(STR,y,z)<endl;//STR没有展开return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。