C ++没有等号,但编译时没有赋值

时间:2017-02-09 22:33:30

标签: c++

在追踪我的软件中的一个错误时,我遇到了一种奇怪的行为,并且想知道是否有人会有一些后见之明。

这是代码(它编译并且没有任何运行时错误):

await

为什么这行编译;它错过了一个等号:

#define ERR_OK 0
#define ERR_NOT_OK -41

int some_class::some_function(uint32_t verbose){
    int ret_value = ERR_OK;

    if (some_condition) {
         ret_value ERR_NOT_OK;
    }

    return ret_value;
}

Xcodebuild日志:

ret_value ERR_NOT_OK;

编辑:删除分号并将#define ERR_NOT_OK 1更改为#define ERR_NOT_OK -41;添加了xcodebuild日志。

1 个答案:

答案 0 :(得分:4)

如果ERR_NOT_OK定义为-41,那么

ret_value ERR_NOT_OK;

替换为

ret_value -41;

这是一个有效的表达式语句,即使它实际上是一个无操作。最初打算作为一元-的内容在此上下文中被解释为二进制-

这就是将其定义为

的好主意
#define ERR_NOT_OK (-41)