为什么以下C程序编译没有错误?

时间:2013-04-14 02:09:26

标签: 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

一切都好看。这不应该在某处产生错误或警告吗?

3 个答案:

答案 0 :(得分:4)

在C89和预标准C中,如果您没有指定类型,则假定为int

另见Why doesn't the removal of int keyword generate any error?

答案 1 :(得分:2)

当我在gcc中打开警告进行编译时,我看到了这个警告:

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

我使用的标志是-Wall -W -pedantic。默认情况下启用警告可以为您节省很多问题。

答案 2 :(得分:1)

尝试使用“gcc -std = c99 triangle.c”会产生警告。