术语“函数的隐式声明”是什么意思?在不包含适当头文件的情况下调用标准库函数会产生警告,如下所示:
int main(){
printf("How is this not an error?");
return 0;
}
难道不应该在没有声明错误的情况下使用函数吗?请详细解释一下。我搜索了这个网站并发现了类似的问题,但找不到明确的答案。大多数答案都提到了包含头文件以消除警告,但我想知道这为什么不是错误。
应将其视为错误。但C是一门古老的语言,所以这只是一个警告。
编译用-Werror(GCC)修复了这个问题。
当 C 找不到声明时,它会采用以下隐式声明:int f();
,这意味着该函数可以接收您提供的任何内容,并返回一个整数。如果这恰好足够接近(并且如果printf
,它是),然后事情就可以进行了。在某些情况下(例如,函数实际上返回一个指针,并且指针大于整数),这可能会造成真正的麻烦。
请注意,这已在较新的 C 标准中得到修复(C99 and C11)。在这些标准中,这是一个错误。但是,GCC 默认情况下并不实现这些标准,因此您仍然会收到警告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)