c - 为什么允许声明未指定返回类型的 C 函数?

标签 c function

我惊讶地发现这是一个有效的 C 函数声明:

f() {
    return 10; 
}

未指定函数的返回类型。它不仅编译,而且实际上返回 10。

void main() {
        int i = f();
        printf("i = %d\n", i); 
}

此代码产生以下输出:

i = 10

这是用 gcc 4.8.4 编译的。 为什么没有明确指定返回类型的函数声明编译时没有错误/警告?

编辑:正如所解释的here返回类型不是函数签名的一部分,您不能根据不同的返回类型重载函数,但这并没有回答函数声明需要返回类型的问题。

最佳答案

在 ANSI C (C89/90) 中,未指定的返回类型隐式为 int。自 C99 以来,这已被正式禁止,但这并不会阻止编译器实现它。如果在 C99 或 C11 模式下编译,GCC 的 -pedantic 或类似标志应该发出警告。

编辑:在 GCC 4.9 中,-Wall 在默认 (GNU C) 模式下对其发出警告,而 -pedantic 使用 -std=c99 对其发出警告

关于c - 为什么允许声明未指定返回类型的 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31325400/

相关文章:

javascript - 为什么我不能从两个函数内部调用该函数?

c - fgetc 给我垃圾

c - 在 C 语言中使用 "define"作为 int 和 char

c - 如何将包含 8 个字节(表示 64 位 int)的(char)数组转换为字符串

c - 如何使用 mpeg.org 的 mpeg2v12 解码器 API?

linux - 了解 2 个 shell 函数

python - 如何在 Python 中获得与 C 的 __FUNCTION__ 相同的功能?

c - C程序的奇怪行为

c++ - 在 C++ 中将函数参数检索为元组

function - SQL Server 2008 R2如何创建函数?