c - 为什么在 C 中不强制声明具有 int 返回类型的函数?

标签 c function forward-declaration function-declaration

int main ()
{
hello();

return 0;
}

int hello()
{

printf("\n hello world");

return 0;
}

根据 C 规则,定义在 main() 下方的每个函数都必须在 main() 上方声明,但为什么它是具有 int 的函数的异常(exception) 作为返回类型? 如果您将 hello() 的返回类型更改为其他类型(void、char * 等) 它会抛出声明错误。为什么 int 返回类型没有错误或警告?

最佳答案

这是 C 的一个旧特性,现在正式不支持了。

在早期(C99 之前,如果我没记错的话),如果函数缺少返回类型,或者函数缺少前向声明,则函数是假设返回一个int并接受任意数量的参数。您对该函数的实际定义也符合该假设,因此链接器也不会提示。

您的编译器仍然支持该旧功能(主要是为了保持对使用旧标准编写的程序的向后兼容性),因此您可以成功编译和链接该程序。

仅供引用,在最新的 C 标准 C11 中,官方提到了它

  • remove implicit function declaration

因此,根据严格检查,必须前向声明一个函数(或者,在使用前定义,这样编译器就不必承担任何事情)。

关于c - 为什么在 C 中不强制声明具有 int 返回类型的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39416299/

相关文章:

c++ - 前向声明类型上的 std::vector

c - 这个扫描文件并返回行数/段落数/字数的程序有什么问题?

c - OpenGL 无法使用 Visual C++ 编译器渲染场景

JavaScript 异步函数流程

javascript - 我需要使用变量填充表格以创建 Javascript 散点图的帮助

c++ - 如何从另一个 C++ 类访问一个结构?

c++ - C++ 中的包含和转发声明

c - 在c中通过套接字发送缓冲区长度和缓冲区

c - 指向二维数组的指针

jquery - AJax不是函数错误