我编写了一个简单的宏,以便在 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/