在上述代码中,宏WRITE_(X)用于将传入的参数X与字符串iwrite进行拼接,产生一个新的标识符。然后,宏WRITE(X)调用WRITE_宏,并传入X作为参数进行拼接。在for循环中,使用WRITE(i)来访问相应的变量,并赋予其对应的数值。输出结果将会是:这样,通过宏和连接运算符##,可以在循环中动态地拼接变量名并...
这段代码的意思是,使用STRINGIFY宏可以将一个宏定义转换为字符串,使用STRING_CONCAT宏可以将两个宏定义拼接在一起。在代码中使用这两个宏可以方便地生成一些字符串常量和变量名。 宏定义技巧七:使用宏定义进行条件编译 在C/C++中,我们可以使用宏定义来进行条件编译,以便根据不同的条件编译不同的代码。例如下面的代码...
在上面的例子中,对宏的三个参数进行了拼接,拼接规则是在宏的表达式中,参数与参数之间用##连接起来,中间不能有空格。这个功能可以用于合成变量名称,或是从两个或多个宏参数中生成一个格式控制字符串。 用法示例: #definePrintStr(var) printf(#var"=%s", var)#definejoin(vA, vB, vC) vA##vB##vCintmain...
PRIMITIVE_CAT(X,Y));所以拼接结果是PRIMITIVE_CAT(X,Y) -> XY -> 2. 拼接后得到了宏XY,直...
//调用宏 STRUCT(int, IntStruct); // 定义一个名为IntStruct的结构体,其中成员类型为int int mai //创建结构体变量 IntStruct s; s.member = 10; printf("Member value: %d\n", s.member); return 0; ``` 运行上述代码,会输出10,表示结构体变量s的成员值为10。 通过使用宏定义拼接结构体,我们可以...
",b[100]; int i; for(i=0;*(a+i)!='\0';i++) { *(b+i)=*(a+...
1. #:在宏展开的时候会将#后面的参数替换成字符串,如: #define p(exp) printf(#exp); 调用p(asdfsadf)的时候会将#exp换成"asdfsadf" 2. ##:将前后两个的单词拼接在一起。例如《The C Programming Language》中的例子: #define cat(x,y) x##y ...
#definePrefix(n) prefix_##n//将 prefix_ 和 n 对应的字符串内容拼接在一起intPrefix(x);//int prefix_x; 拼接结果是标志符 prefix_x 而不是字符串常量 "prefix_x"intPrefix(3);//int prefix_3; 还有一些比较神奇的宏的用法如 X Macro trick 等,感兴趣的可以自行了解一下。
// 使用宏创建宏名为MACRO_Test的宏 CREATE_MACRO(Test) int main() { // 调用宏创建的宏名为MACRO_Test的宏 MACRO_Test(); return 0; } 在上述示例中,我们首先定义了一个宏CREATE_MACRO_NAME,它接受一个参数name,并使用##操作符将其与MACRO_拼接起来,从而创建一个新的宏名。