2

看下面的程序。

int main()
{
    char a=65, ch ='c';
    printit(a,ch);
}

printit(a,ch)
{
    printf("a=%d   ch=%c",a,ch);
}

即使参数的数据类型没有在函数“printit()”中指定,结果也会显示在 printf 上。当我用 gcc 编译并运行它时,我看到了正确的答案。为什么?是否不需要在 C 中指定参数的数据类型?在上面显示的情况下,参数的默认数据类型是什么?

4

2 回答 2

3

C 中假定的唯一默认数据类型int与上面的代码相同。

较新版本的 C++ 禁止隐式数据类型,而较新的 C++ 编译器拒绝编译上述代码。

于 2009-06-22T12:10:58.063 回答
1

因为您没有为 指定原型printit(),所以编译器构成了隐式声明:

int printit(int, int);

当以后的编译器看到printit()没有参数类型的函数定义时,它会使用该隐式声明。

这是一种非常危险的技术——你基本上禁止对这个函数进行类型检查。

于 2009-06-22T12:54:16.743 回答