#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; }
时间: 2024-10-07 23:48:48