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

jav*_*red 0 c++

我调试这段代码:

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

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

    result  131075  unsigned int
Run Code Online (Sandbox Code Playgroud)

在Watch中,我看到:

    CG_ERR_TIMEOUT  error: identifier 'CG_ERR_TIMEOUT' out of scope 
Run Code Online (Sandbox Code Playgroud)

去定义向我展示了这样的代码:

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
};
Run Code Online (Sandbox Code Playgroud)

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

ken*_*ytm 5

因为CG_RANGE_BEGIN是131072(即0x20000).

enum {

    CG_ERR_OK = 0,
    CG_ERR_INTERNAL = CG_RANGE_BEGIN,   // == 131072
Run Code Online (Sandbox Code Playgroud)

从现在开始,每个枚举值都是前一个加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

};
Run Code Online (Sandbox Code Playgroud)