C/C++转换为字符串宏和字符串拼接宏的综合使用
本文内容参考:
C/C++ 宏拼接和宏展开为字符串 - DoubleLi - 博客园
特此致谢!
1. 转换为字符串宏与字符串拼接宏
(1)转换为字符串宏
转换为字符串的宏为:
#define STR(x) #x //转字符串
(2)字符串拼接宏
字符串拼接的宏为:
#define CONCAT(x,y) x##y //拼接
2. 两种宏结合使用出现的问题
以上两种宏定义在开发中是很常见的。但是,当将两者结合起来使用,单纯(同时)使用上边的宏就不行了。例如以下几种情况。
(1)第一种情况
代码如下:
#include <stdio.h>
#define STR(x) #x
#define CONCAT(a, b) a##b
int main(void)
{
printf("STR(aaa) is: %s\n", STR(aaa));
printf("STR(111) is: %s\n", STR(111));
printf(STR(CONCAT(aaa, 111)));
return 0;
}
运行结果如下:
以上代码的本意是让aaa和111先进行拼接,拼接为aaa111,然后再转换为字符串,即"aaa111"。但是实际的结果却是输出了"CONCAT(aaa, 111)",即并没有先将CONCAT宏展开,而是直接使用了。这是第一种情况。
(2)第二种情况
仍然使用以上代码,只是稍作修改:
#include <s