現在取り組んでいるコードでこれを見つけ、それが私が抱えているいくつかの問題の原因であると考えました。
どこかのヘッダーで:
enum SpecificIndexes{
//snip
INVALID_INDEX = -1
};
その後 - 初期化:
nextIndex = INVALID_INDEX;
そして使う
if(nextIndex != INVALID_INDEX)
{
//do stuff
}
コードをデバッグすると、nextIndex の値が意味をなさない (非常に大きい) ため、次のように宣言されていることがわかりました。
unsigned int nextIndex;
そのため、INVALID_INDEX への初期設定は、unsigned int をアンダーフローして膨大な数に設定していました。それが問題の原因だと思いましたが、詳しく見ると、テスト
if(nextIndex != INVALID_INDEX)
つまり、nextIndex が「大きな +ve 値」の場合、if の本体を実行しませんでした。
これは正しいです?これはどのように起こっていますか?enum 値は変数と同じ型の unsigned int に暗黙的にキャストされているため、同じようにラップされていますか?