宏函数调用缺少参数警告,即使给定了参数



我写了一个简单的宏,当它在Debug配置中被击中时,它会在Visual Studio中抛出一个断点:

#ifdef _MSC_VER
#   define FLING_BREAK()    __debugbreak
#endif  // _MSC_VER

我如何调用它的一个例子是:

FLING_BREAK();

然而,这会导致warning C4551: function call missing argument list

我尝试了几种不同的方式来更改宏:

#ifdef _MSC_VER
#   define FLING_BREAK(...) __debugbreak
#endif  // _MSC_VER

#ifdef _MSC_VER
#   define FLING_BREAK(str) __debugbreak
#endif  // _MSC_VER

它们会导致丢失参数列表的警告,即使我给出一个字符串:

FLING_BREAK("This shouldn't warn?"); // throws warning C4551

知道如何解决这个问题,同时保持调用这个宏的语法不变吗?我在GCC或Clang 8.0上没有得到这个警告,只有在MSVC中。谢谢

__debugbreak()声明为:

void __debugbreak();

当你使用

FLING_BREAK();

它扩展到

__debugbreak;

即您没有进行函数调用。这就是编译器所警告的。将宏更改为:

#   define FLING_BREAK()    __debugbreak()

最新更新