术语“函数的隐式声明”是什么意思?在不包含适当的头文件的情况下调用标准库函数会产生警告,如以下情况:
int main(){
printf("How is this not an error?");
return 0;
}
不应该在没有声明错误的情况下使用函数吗?请详细说明。我搜索了这个网站并发现了类似的问题,但找不到明确的答案。大多数答案都说了一些关于包含头文件以消除警告的内容,但我想知道这不是错误。
最佳答案
这应该被认为是一个错误。但是C是一门古老的语言,所以它只是一个警告。
使用 -Werror 编译(GCC) 修复了这个问题。
当 C 找不到声明时,它会假定此隐式声明:int f();
,这意味着该函数可以接收您提供的任何内容,并返回一个整数。如果这恰好足够接近(在 printf
的情况下,它是),那么事情就可以了。在某些情况下(例如,函数实际上返回一个指针,而指针比 int 大),这可能会造成真正的麻烦。
请注意,这已在较新的 C 标准(C99 和 C11)中修复。在这些标准中,这是一个错误。但是,默认情况下 GCC 不执行这些标准,因此您仍然会收到警告。
关于c - C 中的隐式函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56436814/