c++ - #define 不执行所有参数

标签 c++

我在使用我所做的#define 时遇到了问题。由于某种原因,它没有检查语句中的所有参数。

THROW_AND_LOG(Foo::Initialize() && Bar::Initialize() && FooBar::Initialize(), "Something() could not Initialize singletons.");

出于某种原因,它只是初始化 Foo 然后退出语句。它不会抛出或记录。

但是

THROW_AND_LOG((Foo::Initialize() && Bar::Initialize() && FooBar::Initialize()), "Something() could not Initialize singletons.");

出于某种原因工作正常。 (将所有支票包裹在括号中)。

我将把所有内容都移到它自己的单独行以解决这个问题,因为它首先不是最好的代码。但是我很好奇为什么它不会执行所有语句。

这里是定义:

#define THROW_AND_LOG(x, message) if(!x) { throw std::runtime_error(message);              \
    LOG::v1::MessageSender messageSender("log");                                           \
    LOGGING_ERROR(messageSender,message);}

最佳答案

宏展开后,

if(!x)

转换为

if(!Foo::Initialize() && Bar::Initialize() && FooBar::Initialize())

Foo::Initialize() 可能返回 true,因此 !Foo::Initialize()false 和其他术语不执行(更不用说它们的含义已更改为相反)。

关于c++ - #define 不执行所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29108422/

相关文章:

c++ - 在 C++ 中找到 3 个数字中最小的

c++ - QT中如何获取后台应用程序窗口标题?

C++ mprotect 用于读、写和执行

c++ - 在缓冲区中推送多个变量值

c++ - 我们如何在指针中存储对对象的引用?

内部类中的 C++ 模板运算符重载

c++ - 模板函数重载

c++ - 位集到动态位集

c++ - STL 容器中的 Const 函数

c++ - 如何在 WebView2 上启用扩展