2013-04-14 50 views
0

我的程序如下爲什麼下面的C程序無錯地編譯?

#include <stdio.h> 

int getTriangle(num) { 
    if (num == 1) { 
     return num; 
    } else { 
     return num + getTriangle(num - 1); 
    } 

} 

int main() 
{ 
    int tri = getTriangle(7); 
    printf("%i\n", tri); 
    return 0; 
} 

我無意中在我的功能getTriangle沒有宣佈NUM的類型犯了一個錯誤。換句話說該行應爲:

int getTriangle(int num) { 

然而,當我編譯

make euler012 
cc  euler012.c -o euler012 

和運行

./euler012 
28 

一切似乎確定。這不應該在某處產生錯誤或警告嗎?

回答

2

當我和警告編譯開啓在gcc我看到這樣的警告:

warning: type of 'num' defaults to 'int' [enabled by default] 
    int getTriangle(num) { 

,我使用標誌-Wall -W -pedantic。默認情況下啓用警告將爲您節省很多長期的問題。

1

試着用「gcc -std = c99 triangle.c」它會產生一個警告。