宏函数调用缺少参数警告,即使给出参数也是如此

时间:2019-11-04 16:11:12

标签: c++ c visual-c++

我编写了一个简单的宏,当在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中。谢谢!

1 个答案:

答案 0 :(得分:3)

__debugbreak()declared as

void __debugbreak();

使用时

FLING_BREAK();

它扩展为

__debugbreak;

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

#   define FLING_BREAK()    __debugbreak()