这可能是一个愚蠢的问题,但我正在通过K& R书来练习C,有点注意到你不需要为函数指定返回类型。我认为C是一种强类型语言。这怎么可能 ?这是类型推断吗?也许他们会因为隐式转换而放弃这样的东西,但看到这一点有点困惑..
例如:
#include<stdio.h>
int main()
{
int c = funct();
}
funct()
{
return 3;
}
答案 0 :(得分:4)
没什么特别的;默认的返回类型是int。
答案 1 :(得分:3)
如果省略返回类型,则默认为int
。
因此funct()
会返回int
类型。这就是代码编译的原因。
这是折旧的,现代编译器会在省略返回类型时发出警告。 (在C99和C ++中根本不允许这样做。)
编辑:
除此之外,在您的示例中,在调用之前不要声明funct()
函数。
在C中,如果先前未声明函数且其名称出现在 表达式后跟左括号,它是隐式的 声明为一个返回int的函数,并且没有任何假设 关于它的论点。
答案 2 :(得分:3)
当省略类型说明符时,C89有一个隐式int
规则(例如函数的返回类型)。
C99不再允许省略类型说明符类型。
当你引用K&amp; R2时,这本书明确地解释了它(在4.1基本功能中):
如果省略返回类型,则假定为
答案 3 :(得分:2)
实际上这是(afaik)C99中的非标准(但在C89中被允许 - 请参阅注释),但大多数编译器假设返回类型 int 如果没有已指定。但是,任何体面的编译器都应该发出警告,你应该认真对待警告。
答案 4 :(得分:1)
在旧版本的C中,如果没有指定类型,函数返回类型和没有类型的参数将默认为int
,尽管这已从C99开始删除,其中函数必须声明并使用返回类型定义,并且必须指定参数类型。