我调试了这段代码:
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.多么奇怪的幻数?
答案 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
};