【发布时间】:2015-03-17 19:51:22
【问题描述】:
我在创建#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);}
【问题讨论】:
-
为什么这是一个宏?
-
我正在记录错误并抛出错误,并被告知要创建一个宏。创建不必要的宏是问题还是我不应该记录和抛出?也许只在最后捕获日志?
-
@marsh:你需要一个宏来获取
__FILE__和__LINE__。但分开关注。为此创建一个宏,获取该信息。其余的使用普通函数。 -
日志系统实际上已经获取了所有这些信息。虽然在你提到它之前我确实忘记了它。
-
“被告知要制作宏”由谁?
标签: c++