2013-12-18 53 views
-4

我的朋友和我有了這個小片的代碼作爲自變量的liitle一段代碼的參數:關於用C

#include <stdio.h> 
#include <stdio.h> 

int foo (int k) 
{ 
    int i, n; 

    for (i = i ? 0 : i, n ^= n; i < sizeof(k) * 8;) 
     n += k >> i++ & ~-2; 
    return n; 
} 

我懷疑這會不會編譯因爲i初始化,但我的朋友們認爲它會。你怎麼看?

+4

您是否嘗試編譯它自己? – chrisaycock

+0

我做了 在VC IT劑量編譯,但在GCC和ideone.com它確實 – styx

+3

這是一個畫。沒有人贏,但我們都失去了一點點...... –

回答

5

從語法的角度來看,這段代碼似乎完全有效。所以它應該是可編譯的。

但是,如果您嘗試運行它......它有這麼多未定義的行爲,我停止計數。

i不是未定義的,它是未初始化的。它在局部變量定義中完美定義。 C不是Java,變量不一定必須被初始化才能使用。

+0

是啊我的意思是說未初始化/多數民衆贊成我的不好 – styx

+0

'我'和'n'將循環的主體首次執行時爲零,無論其初始值。 – EJP

+0

@EJP:不,'n^= n'對於任何特定的'n'值都會導致0,但是如果它是未初始化的,那麼就是UB,並且您沒有任何擔保。 – rodrigo

1

它應該沒問題,因爲您確實聲明i爲int變量。我通過編譯器(GCC)編譯了你的代碼,看起來你的代碼可以被編譯。我通過用你的foo函數替換了一些整數來運行它,它似乎正在返回整數。例如,foo(5)將產生2.