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

标签 c++ c visual-c++

我编写了一个简单的宏,以便在 Debug 配置中命中时在 Visual Studio 中抛出断点:

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

我如何调用它的示例是:

FLING_BREAK();

但是,这会导致警告 C4551:函数调用缺少参数列表

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

#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()declared as :

void __debugbreak();

当您使用时

FLING_BREAK();

它扩展为

__debugbreak;

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

#   define FLING_BREAK()    __debugbreak()

关于c++ - 宏函数调用缺少参数警告,即使给定了参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58697187/

相关文章:

windows - 谁负责在处理 TB_GETBUTTONTEXT 时放置空终止符?

c++ - 打印出文件的最后 10 行

函数指针的正确使用

c# - 在 C# 或 VC++ 中导入 MinGW C++ DLL

c++ - pthread_mutex_lock 阻塞但 __lock = 0

c - 使用xc8编译器的pic16f1704的I2C通信

c++ - double 到 long 的转换不正确

C++:带大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?

c++ - 如何将数字转换为整数 vector ?

C++ - 纯虚函数的参数