【问题标题】:Macro function call missing argument warning, even when given an argument宏函数调用缺少参数警告,即使给定参数
【发布时间】:2019-11-04 16:11:12
【问题描述】:

我编写了一个简单的宏,当它在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 是一个函数,需要()

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


【解决方案1】:

__debugbreak()declared as

void __debugbreak();

当你使用时

FLING_BREAK();

它扩展为

__debugbreak;

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

#   define FLING_BREAK()    __debugbreak()

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2020-05-16
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多