什么是#__VA_ARGS__应该在没有传递参数时生成?

Bry*_*yan 5 c++ c-preprocessor variadic-macros

示例代码:

#define FOO(...) You passed: #__VA_ARGS__
FOO(1,2,3)
FOO()
Run Code Online (Sandbox Code Playgroud)

使用Visual C++(版本14 CTP)进行预处理,得到:

You passed: "1,2,3"
You passed:
Run Code Online (Sandbox Code Playgroud)

在最后一行,#__VA_ARGS__变成了虚无.我希望它变成"".

对于应该发生的事情,是否有明确的参考?我用Google搜索了很多但却找不到它.

任何建议的解决方案也很有用.

eca*_*mur 7

6.10.3.2#运算符(C11):

语义

2 - [...]对应于空参数的字符串文字是"".[...]

所以我认为MSVC在这里是不正确的.

我会使用字符串文字串联来解决这个问题:

#define FOO(...) You passed: "" #__VA_ARGS__
Run Code Online (Sandbox Code Playgroud)