为什么我的程序中的一个枚举有奇怪的价值131075?

时间:2012-11-26 14:26:14

标签: c++

我调试了这段代码:

result = conn_process(conn, 1, 0);
if (result == CG_ERR_OK) continue;
if (result == CG_ERR_TIMEOUT)
{
    break;   // i'm here!
}

在调试器中,我在break;,我认为result == CG_ERR_TIMEOUT是真的。在当地人我看到:

    result  131075  unsigned int

在Watch中,我确实看到了:

    CG_ERR_TIMEOUT  error: identifier 'CG_ERR_TIMEOUT' out of scope 

转到定义会向我展示这样的代码:

enum {
CG_ERR_OK = 0,
CG_ERR_INTERNAL = CG_RANGE_BEGIN,
CG_ERR_INVALIDARGUMENT,
CG_ERR_UNSUPPORTED,
CG_ERR_TIMEOUT,
CG_ERR_MORE,
CG_ERR_INCORRECTSTATE,
CG_ERR_DUPLICATEID,
CG_ERR_BUFFERTOOSMALL,
CG_ERR_OVERFLOW,
CG_ERR_UNDERFLOW,
CG_RANGE_END
};

所以我只是想知道为什么CG_ERR_TIMEOUT == 131075.多么奇怪的幻数?

1 个答案:

答案 0 :(得分:5)

因为CG_RANGE_BEGIN是131072(即0x20000)。

enum {

    CG_ERR_OK = 0,
    CG_ERR_INTERNAL = CG_RANGE_BEGIN,   // == 131072

从现在开始,每个枚举值都是前一个加1:

    CG_ERR_INVALIDARGUMENT,             // == 131072 + 1 = 131073
    CG_ERR_UNSUPPORTED,                 // == 131073 + 1 = 131074
    CG_ERR_TIMEOUT,                     // == 131074 + 1 = 131075
    CG_ERR_MORE,                        // etc.
    CG_ERR_INCORRECTSTATE,
    CG_ERR_DUPLICATEID,
    CG_ERR_BUFFERTOOSMALL,
    CG_ERR_OVERFLOW,
    CG_ERR_UNDERFLOW,
    CG_RANGE_END

};