0

私はこのコードをデバッグします:

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

ウォッチで私は見ます:

    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なのか疑問に思います。なんて奇妙な魔法の数字ですか?

4

1 に答える 1

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

};
于 2012-11-26T14:28:23.220 に答える