2015-02-10 87 views
-3

所以我有這個代碼輝煌行,我正好有一個錯字:編譯器不會抱怨錯誤的語法

for(int x=firstKey; x <- runner->numKeys; x++){...} 

不僅沒有順利編譯而且程序鏈接,並沒有跑一個問題。

當然for循環沒有運行一次。但我不明白什麼<-被解釋爲?這是如何合法的?

+4

這就是元減運算符。 – 2015-02-10 05:07:05

回答

4

它被這樣解釋的:

for(int x = firstKey; x < -runner->numKeys; x++) 

空白在C.例外大多微不足道包括您不能添加空格內令牌像<=::。但是令牌之間的空間通常是允許的,並且大部分時間也允許刪除令牌之間的空間。

+0

現在我明白了,謝謝!另外,這是C. – codehitman 2015-02-10 05:10:09

2

其實,這不是語法,這是完全有效語法,是語句:

if (a = 7) doSomething(); // will set a to 7 and call doSomething(). 
b == 42;     // won't set b to 42 at all. 

你有什麼是語義問題,而不是語法之一。 意思是,而不是結構,是不正確的。

表達:

x <- runner->numKeys 

被解釋爲:

x < (-runner->numKeys) 

換句話說,循環將只要x小於鍵的數量的否定運行。由於鍵的數量很可能是正數(儘管有一個零邊的情況需要考慮),否定將是負數,因此如果第一個鍵是非負數,則主體將永遠不會運行。

在任何情況下,邊緣情況都是不相關的,因爲行爲仍然是不正確的,只是以不同的方式。我收集你可能的意思是之一:

x <= runner->numKeys 
x < runner->numKeys 
相關問題