Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将宏参数转换为字符串常量并考虑逗号_C++_C_Macros - Fatal编程技术网

C++ 将宏参数转换为字符串常量并考虑逗号

C++ 将宏参数转换为字符串常量并考虑逗号,c++,c,macros,C++,C,Macros,假设我有一个C宏定义的产品版本,如下所示: #define FOO_VERSION 1,0,0,1 我想在运行时打印它: #define STRING_VALUE(x) #x int main() { std::cout << STRING_VALUE(FOO_VERSION) << std::endl; } #定义字符串_值(x)#x int main() { std::cout您可以将参数视为一个单变量宏: #define FOO_VERSION 1,0

假设我有一个C宏定义的产品版本,如下所示:

#define FOO_VERSION 1,0,0,1
我想在运行时打印它:

#define STRING_VALUE(x) #x

int main()
{
    std::cout << STRING_VALUE(FOO_VERSION) << std::endl;
}
#定义字符串_值(x)#x
int main()
{

std::cout您可以将参数视为一个单变量宏:

#define FOO_VERSION 1,0,0,1

#define STRING_VALUE(...) STRING_VALUE__(__VA_ARGS__)
#define STRING_VALUE__(...) #__VA_ARGS__

<>这似乎与GCC和Visual C++有关。

为什么我没想到呢?
#define STRING_VALUE(x) STRING_VALUE__(x)
#define STRING_VALUE__(a, b, c, d) #a "," #b "," #c "," #d

int main()
{
    std::cout << STRING_VALUE(FOO_VERSION) << std::endl;
}
#define FOO_VERSION 1,0,0,1

#define STRING_VALUE(...) STRING_VALUE__(__VA_ARGS__)
#define STRING_VALUE__(...) #__VA_ARGS__