3

我只能使用 xCode 4.6 重新创建此错误。使用 Xcode 4.5 一切正常

问题是 myVal 具有正确的位结构来表示 -1 的 int val。但是,它显示的值为 4294967295,如果用无符号整数表示,则该值是相同位结构的值。您会注意到,如果我将 myVal 转换为 int,它将显示正确的值。这很奇怪,因为枚举应该是一个 int 。

这是一个屏幕截图,显示了 main 末尾调试器中我所有变量的值。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 回答