C自动返回类型

时间:2012-02-03 22:09:53

标签: c return-type

这可能是一个愚蠢的问题,但我正在通过K& R书来练习C,有点注意到你不需要为函数指定返回类型。我认为C是一种强类型语言。这怎么可能 ?这是类型推断吗?也许他们会因为隐式转换而放弃这样的东西,但看到这一点有点困惑..

例如:

#include<stdio.h>

int main()
{
    int c = funct();
}

funct()
{
    return 3;
}

5 个答案:

答案 0 :(得分:4)

没什么特别的;默认的返回类型是int。

答案 1 :(得分:3)

如果省略返回类型,则默认为int

因此funct()会返回int类型。这就是代码编译的原因。

这是折旧的,现代编译器会在省略返回类型时发出警告。 (在C99和C ++中根本不允许这样做。)

编辑: 除此之外,在您的示例中,在调用之前不要声明funct()函数。

From Wikipedia

  

在C中,如果先前未声明函数且其名称出现在   表达式后跟左括号,它是隐式的   声明为一个返回int的函数,并且没有任何假设   关于它的论点。

答案 2 :(得分:3)

当省略类型说明符时,C89有一个隐式int规则(例如函数的返回类型)。

C99不再允许省略类型说明符类型。

当你引用K&amp; R2时,这本书明确地解释了它(在4.1基本功能中):

  

如果省略返回类型,则假定为

答案 3 :(得分:2)

实际上这是(afaik)C99中的非标准(但在C89中被允许 - 请参阅注释),但大多数编译器假设返回类型 int 如果没有已指定。但是,任何体面的编译器都应该发出警告,你应该认真对待警告。

答案 4 :(得分:1)

在旧版本的C中,如果没有指定类型,函数返回类型和没有类型的参数将默认为int,尽管这已从C99开始删除,其中函数必须声明并使用返回类型定义,并且必须指定参数类型。