我最近不得不輸入一個小的C測試程序,並且在這個過程中,我偶然使用vooid
而不是void
在主函數中犯了一個拼寫錯誤。「int main(vooid)」?這是如何運作的?
但它仍然奏效。
降低下來到其最小完整版,我結束了:
int main (vooid) {
return 42;
}
但這確實編譯(gcc -Wall -o myprog myprog.c
),並在運行時,它會返回42
究竟是怎麼這個有效的代碼?
這裏的成績單切割和從我bash
殼粘貼展示我在做什麼:
pax$ cat qq.c
int main (vooid) {
return 42;
}
pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq
pax$ echo $?
42
通過用一個`int`參數定義main,可以調用** Undefined Behavior **。任何事情都可能發生:) – pmg 2011-02-13 23:40:45
其實,我不確定UB,@ pmg。 ISO特別允許來自標準兩個典型的`main`的其他可能性。爲便於攜帶,您應該使用其中的一種,但我不認爲UB適用於此。 – paxdiablo 2011-02-14 00:50:01
嗯:在託管環境中`main`必須有2個規範形式之一(2.1.2.2)。但是你是對的@pax,在獨立環境中,標識符`main`並不是特別的:如果作爲一個函數使用,它可以是任何類型,並且可以具有任何類型的任意數量的參數。 – pmg 2011-02-14 19:08:53