c - C 中的隐式函数声明

标签 c

术语“函数的隐式声明”是什么意思?在不包含适当的头文件的情况下调用标准库函数会产生警告,如以下情况:

int main(){
  printf("How is this not an error?");
  return 0;
}

不应该在没有声明错误的情况下使用函数吗?请详细说明。我搜索了这个网站并发现了类似的问题,但找不到明确的答案。大多数答案都说了一些关于包含头文件以消除警告的内容,但我想知道这不是错误。

最佳答案

这应该被认为是一个错误。但是C是一门古老的语言,所以它只是一个警告。
使用 -Werror 编译(GCC) 修复了这个问题。

当 C 找不到声明时,它会假定此隐式声明:int f();,这意味着该函数可以接收您提供的任何内容,并返回一个整数。如果这恰好足够接近(在 printf 的情况下,它是),那么事情就可以了。在某些情况下(例如,函数实际上返回一个指针,而指针比 int 大),这可能会造成真正的麻烦。

请注意,这已在较新的 C 标准(C99C11)中修复。在这些标准中,这是一个错误。但是,默认情况下 GCC 不执行这些标准,因此您仍然会收到警告。

关于c - C 中的隐式函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56436814/

相关文章:

C:解引用指向不完整类型单链表的指针

c - Glade GTK 访问各个小部件

c - C语言中匹配IP地址的最佳正则表达式或技术是什么

C: Linux 内置链表在内核数据结构中的使用

c - c、fclose()、remove()、rename() 中的奇怪行为

c++ - 强制 sscanf 返回超过满足数量的参数

php - PHP 的 password_verify() 对极长密码(DoS 攻击)是否安全?

c - 有没有 Fortran 编译器之类的东西?

c++ - visual studio 内联程序集发出字符串宏

android - 有 Bluedroid 测试或示例代码吗?