CIF*_*ter 7 c enums signed objective-c llvm
出于各种实现原因,我已经定义了以下枚举:
typedef enum HBSnakeMovementDirection
{
HBSnakeMovementDirectionUp = 1,
HBSnakeMovementDirectionDown = -1,
HBSnakeMovementDirectionRight = 2,
HBSnakeMovementDirectionLeft = -2
}
HBSnakeMovementDirection;
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用HBSnakeMovementDirectionRight
,我会收到以下警告:
Implicit conversion changes signedness: 'int' to 'HBSnakeMovementDirection'
任何其他枚举值都没有问题.这有什么问题?我认为这可能与混合负面和正面枚举值有关,但我无法找到任何关于此的确定性.
(我能够提出所有积极的枚举值,让我可以解决这个问题,但它仍然困扰我,所以我想我会问它.)
我应该说,就像我的所有项目一样,我几乎发出了所有警告 - 因此,-Wconversion
投诉 - 并将其视为错误.(我喜欢在编译时尽可能严格.)我正在使用LLVM 1.6.
更新1:HBSnakeMovementDirectionRight
在前面的警告中逐字地使用结果:
HBSnakeMovementDirection movementDirectionRight = HBSnakeMovementDirectionRight;
Run Code Online (Sandbox Code Playgroud)
我必须施展HBSnakeMovementDirectionRight
才能HBSnakeMovementDirection
使警告沉默.
更新2:根据要求,这是在我的机器上发出的整个构建命令:
更新3:这是我正在GitHub上托管的确切项目:
https://github.com/LucasTizma/Hebi
具体来说,以下树:
https://github.com/LucasTizma/Hebi/tree/89262e2e53881584daf029e3dd5f1e99dfbd6f96
小智 3
正如 Darren 所说,它看起来确实像一个编译器错误,Dave 说 Clang 2.0 中不会\xe2\x80\x99 发生这种情况。
\n\nI\xe2\x80\x99ve 发现以下类型定义使得 OP 代码可以使用 Clang 1.6 进行编译:
\n\ntypedef enum HBSnakeMovementDirection \n{\n HBSnakeMovementDirectionUp = 1, // Default movement direction upon initialization via -init\n HBSnakeMovementDirectionDown = -1,\n HBSnakeMovementDirectionLeft = -2,\n HBSnakeMovementDirectionRight = 2,\n NBSnakeMovementDirectionNone = -3\n}\nHBSnakeMovementDirection;\n
Run Code Online (Sandbox Code Playgroud)\n\n(注意附加NBSnakeMovementDirectionNone
)
这可能与 LLVM bug 1884有关,该错误已被修复。
\n 归档时间: |
|
查看次数: |
3768 次 |
最近记录: |