我在gcc中发现了一些奇怪的东西,并希望得到一些输入,无论是功能还是怪癖 基本上我有一个在func.c中定义的函数
void f(int a, int b, FILE* f)
{
...
...
}
没有相应的头文件。但是当我调用f(a,b)时gcc没有给出任何警告,gdb告诉我用三个参数调用f? 为什么会这样?填充第三个参数的语义是什么。
答案 0 :(得分:4)
如果f()
在任何地方没有声明且未在当前编译单元中定义,则编译器假定f()
返回int
并且可以接受任意数量的参数。< / p>
我知道这很奇怪,但在过去,这可能是一种减少必须包含的头文件数量的方法,因此可以加快编译速度。