2012-04-11 5 views
0

変数の値をvi_theIndexにチェックする必要があります。私は実現Objective-Cの変数の値を確認できません

long long vi_theIndex = 65; 
if ((vi_theIndex >= 0) && (vi_theIndex < 32)) 
{ 
    //Case true 
} 
else 
{ 
    //Case false 
} 

:与えられた瞬間にそれは私がvi_theIndexは32 は、今私はこのようにそれを行うよりも、大きくなったり、ゼロに等しく、小さいかどうかを確認するために65

の値が欲しいました65の結果が間違っていることを示しています。第2のケースが現れるはずですが、最初のケースが真となります。どうしてこれなの?

私はこれを試してみました:

long long vi_theIndex = 65; 

bool limitFlag1, limitFlag2; 

limitFlag1 = (vi_theIndex <= 0); 
limitFlag2 = (vi_theIndex = 65); 

limitFlag2が真になるとlimitFlag1が不定になり、デバッガdoesn'tも私ブレークポイントでそこに停止。 Cが '<'、 '< ='または '>'記号を理解していないようです。

limitFlag1 = (vi_theIndex < 0); 

limitFlag1が定義されていない:私は「<」または「>」ここのような単独の署名を使用する場合にも起こります。

誰かがこれにいくつかの光を当てることができますか?

+1

私はそれがlimitFlag2 =(vi_theIndex == 65)であるべきだと思います。 –

+0

そして、なぜあなたは長く長いのですか?範囲のチェックと可能な最大vi_theIndexを考慮して、インデックスを格納する型をより小さい型に変更する必要があります。また、キャッシュミスのために、現在の偽のステートメントが真のステートメントになるように変更する必要があります.33または66の最大インスタンスまでは最大でもキャッシュミスが発生します.....そしてキャッシュミスが多いので – CStreel

+0

キャッシュミス?あなたは分岐の予測ミスを意味しますか?私はコンパイラがとにかくそれを世話すると期待しています。 –

答えて

2

最初の例で実際のコードを表示してはいけません。あなたが言うように、「大文字小文字」を実行する必要があります。

2番目の例には、おそらくvi_theIndex == 65ではなく、vi_theIndex = 65という問題があります。あなたが持っている通りのステートメントは、常に真です。 limitFlag10になるでしょう - あなたが意味するものが「未定義」になるかどうかはわかりません - 実際のコードはここにも表示されていませんか?

+0

はい、もちろん、vi_theIndex == wsを意味します。 'は未定義になります'とは、通常、変数がその値とともにデバッガで下に表示されることを意味します。 limitFlag1はデバッガに表示されません。 –

+0

一連の最適化を有効にしていますか?場合によっては、(メモリではなく)レジスタ内にのみ存在するように最適化された変数は、デバッガでうまく機能しないことがあります。 –

+0

残念ながら、このコメントフィールドは自分のコードを受け入れません。 –

関連する問題