我惊讶地发现这是一个有效的 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/