编译程序的输出

时间:2014-07-13 16:16:07

标签: c

我有两个问题。我会把它们分开放,但第一个真的很小。

问题1)如果未指定函数的返回类型,则默认为int?

问题2)以下函数在编译时会出现什么错误?

f( int a, int b )
{
    int a;
    a = 20;
    return a;
}

选项包括:

1.) Missing parentheses in return statement.
2.) The function should be defined as int f( int a, int b )
3.) Redeclaration of a
4.) None of the above

据我所知,答案应该是2)和3)。

但它只给出答案2)。为什么会这样?

感谢:。)

2 个答案:

答案 0 :(得分:5)

问题1)如果未指定函数的返回类型,则默认为int吗?

是的,c89就是这种情况。但是c99和c11不再支持此功能。这解释了为什么现在在C中你必须使用int f(int a, int b)

C委员会在C99理由文件中解释(强调我的):

  

" C99的一个新特性:在C89中,声明中的声明说明符可以省略所有类型说明符。在这种情况下,暗示了int。委员会认为,此功能的固有危险性超过了它的便利性,因此被删除。其结果是保证生成诊断,以便捕获其他类别的编程错误。"

答案 1 :(得分:0)

我的回答: 对于第一个问题:不,它不是真的。在C语言中,您必须指定返回类型。如果您不需要返回任何内容,请将其指定为:void。 对于第二个问题:第二选择2.是真的。