我定义了这些宏:
#define AL_ASSERT_NO_MSG(x) if (!(x)) { assertDialog(__LINE__, __FILE__); __debugbreak(); }
#define AL_ASSERT_MSG(x, msg) if (!(x)) { assertDialog(msg, __LINE__, __FILE__); __debugbreak(); }
#define GET_MACRO(_1, _2, NAME, ...) NAME
#define AL_ASSERT(...) GET_MACRO(__VA_ARGS__, AL_ASSERT_MSG, AL_ASSERT_NO_MSG)(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
AL_ASSERT_NO_MSG如果我只传递一个参数并且传递两个参数,我希望将其分派给宏AL_ASSERT_MSG。
但是,当我像这样使用宏时:AL_ASSERT(false, "Test")它扩展为if (!(false, "Test")) { assertDialog(23, "C:\\Dev\\c++\\SortingAlgorithms\\AlgorithmVisualizer\\src\\Window.cpp"); __debugbreak(); };并且不起作用。
详细信息:我正在将 Visual Studio 与 MSVC 结合使用。这不是基于解决方案的项目,而是作为文件夹打开的 CMake 项目。
我做错了什么?任何帮助表示赞赏。
c++ ×1