3

xCode 4.6 を使用して、このバグを再現することしかできませんでした。Xcode 4.5を使用すると、すべてが期待どおりに機能します

問題は、myVal が -1 の int val を表す正しいビット構造を持っていることです。ただし、unsigned int で表した場合、同じビット構造の値である 4294967295 の値を示しています。myVal を int にキャストすると、正しい値が表示されることに気付くでしょう。列挙型は int である必要があるため、これは奇妙です。

これは、メインの最後にあるデバッガーのすべての変数の値を示すスクリーン ショットです。http://cl.ly/image/190s0a1P1b1t

typedef enum : int {
    BTEnumValueNegOne = -1,
    BTEnumValueZero = 0,
    BTEnumValueOne = 1,
}BTEnumValue;

int main(int argc, const char * argv[])
{

@autoreleasepool {

    //on this line of code myVal is 0
    BTEnumValue myVal = BTEnumValueZero;

    //we are adding -1 to the value of zero
    myVal += BTEnumValueNegOne;

    //at this moment myVal has the exact bit stucture 
    //of a signed int at -1, but it is displaying it 
    //as a unsigned int, so its value is 4294967295

    //however, if i cast the enum (which should already 
    //be an int with a signing) to an int, it displays 
    //the correct value of -1
    int myIntVal = (int)myVal;

    }
    return 0;
}
4

1 に答える 1

0

enumタイプを宣言するための新しい好ましい方法NS_ENUMは、この投稿で説明されているマクロを使用することです: http://nshipster.com/ns_enum-ns_options/

于 2013-02-09T15:46:14.520 に答える