首页 > 代码库 > C++宏的高级用法
C++宏的高级用法
#ifndef __GNUC__ #error 编译器为g++,windows下,好像没有把##生成的新字符串当成一个宏处理 #endif #define conn(x,y) x#y // x必须是一个字符串,使用时,conn("2",3),而不能是conn(2,3),3可以是任何类型的字符串 // ## 有两种用法,一种是字符串连接,另一种是把连接生成的字符串当成一个新的宏 // 新宏必须存在 // 用##连接中参数中包含已定义的宏时,宏不会展开 #define STR test #define hello(x,y,z) x##y##z // 第一种用法 cout<<hello(1,2,3)<<endl; // 输出 123 // 第二种用法 #define xyz 333 cout<<hello(x,y,z)<<endl; // 即xyz这个宏必须存在,然后输出333 cout<<hello(STR,y,z)<<endl; // STR不会展开
// 测试程序 #include <iostream> using namespace std; #ifndef __GNUC__ #error 编译器为g++,windows下,好像没有把##生成的新字符串当成一个宏处理 #endif #define conn(x,y) x#y // x必须是一个字符串,使用时,conn("2",3),而不能是conn(2,3),3可以是任何类型的字符串 // ## 有两种用法,一种是字符串连接,另一种是把连接生成的字符串当成一个新的宏 // 新宏必须存在 // 用##连接中参数中包含已定义的宏时,宏不会展开 #define hello(x,y,z) x##y##z int main() { cout<<conn("2",3)<<endl; // 输出 23 // 第一种用法 cout<<hello(1,2,3)<<endl; // 输出 123 // 第二种用法 #define xyz 333 cout<<hello(x,y,z)<<endl; // 即xyz这个宏必须存在,然后输出333 //cout<<hello(STR,y,z)<endl; // STR没有展开 return 0; }
C++宏的高级用法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。