2012-04-11 23 views
0

我需要檢查變量vi_theIndex的值。在給定時刻它有65無法檢查Objective-C中變量的值C

我要檢查,如果vi_theIndex是大於或等於零且小於32 現在,我不喜歡這樣的值:

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

我意識到65的結果是錯誤的。第二種情況應該出現,但第一種情況是成立的。爲什麼是這樣?

我嘗試這樣做:

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); – 2012-04-11 06:03:12

+0

你爲什麼要用很長的時間?考慮到你的檢查範圍和vi_theIndex的最大值,你應該改變你存儲索引的類型到一個更小的類型。也由於緩存未命中,你應該改變它,所以你當前的虛假陳述成爲真正的陳述,因爲對於33或66的每個實例長達MAX最長您將收到一個緩存未命中......並且這是很多緩存未命中 – CStreel 2012-04-11 06:04:59

+0

緩存小姐?你的意思是分支錯誤預測?無論如何,我希望編譯器會照顧它。 – 2012-04-11 06:23:11

回答

2

您不能爲第一個示例顯示真實的代碼 - 正如您所說的,應該執行「case false」。

你的第二個例子有一個問題 - 你有vi_theIndex = 65,而不是vi_theIndex == 65,這可能是你的意思。你所擁有的聲明總是如此。 limitFlag1將是0 - 我不確定你的意思是「變得未定義」 - 你是不是也在這裏展示你真實的代碼?

+0

是的,當然,vi_theIndex == ws的意思。 '變成未定義'表示通常變量在調試器中的值可見。 limitFlag1只是不顯示在調試器中。 – 2012-04-11 06:12:58

+0

你有沒有打開一堆優化?有些變量只能在寄存器(而不是內存)中進行優化,在調試器中效果不佳。 – 2012-04-11 06:23:46

+0

不幸的是,這個評論字段不接受我的代碼。 – 2012-04-11 06:25:12