C:返回类型默认为Int

时间:2011-12-26 04:33:20

标签: c xcode xcode4.2

我正在尝试遵循OReilly的“Cocoa and Objective C:Up and Running”(顺便说一句,这是一个很棒的读物),但是我一直都在对这些烦人的警告进行抨击。

例如:此代码段(第56-57页)......

#include <stdio.h>
#include <stdlib.h>

main() {
    int total = 81;
    float ratio = 1.618;

    char* result;
    asprintf (&result, "total: %i, ratio: %1.3f", total, ratio);

    printf ("%s \n", result);
    free (result);
}

把我扔了......

/Users/justianmeyer/Desktop/test.c:5: warning: return type defaults to ‘int’
/Users/justianmeyer/Desktop/test.c: In function ‘main’:
/Users/justianmeyer/Desktop/test.c:18: warning: control reaches end of non-void function
total: 81, ratio: 1.618 

我已经编程了一段时间,但截至昨天我对C / Objective C来说还是全新的。我一直在读,未声明的方法默认接受/返回一个int,但是不应该自动声明main()方法?为什么需要默认为int?此外,main()是否应该返回一个int?有什么用?收到的退货价值在哪里?

另外:有没有办法在XCode 4.2中创建“.c”文件而不将其包含在项目中?现在我正在使用TextMate作为示例,但我希望在本书的过程中尽可能熟悉XCode。

5 个答案:

答案 0 :(得分:3)

我不了解ObjectiveC但是在标准C中你必须声明返回类型和main的参数。所以: int main(void)应该有效。大多数(所有)操作系统都期望从main返回int。

main的返回值是程序的退出代码,用于指示程序是否正常结束。

答案 1 :(得分:2)

警告是你的朋友。

它告诉你函数返回int但是你没有返回任何东西,因此存在潜在的问题。

答案 2 :(得分:2)

在较旧的C中,可以在没有显式返回类型的情况下定义任何函数,并且默认情况下,假定它返回int。对于函数参数也是如此。在更新版本的C标准中, implicit-int 已被删除(前言第5段)。

此外,任何返回类型不是void的函数(意味着函数不返回值)必须具有return语句,否则您的程序不符合要求。如果您希望程序以明确定义的方式运行,则一致性非常重要。 mainreturn - 语句规则的一个特殊例外,它不需要 来返回语句。如果没有提供return语句,则main函数隐式返回0(第5.1.2.2.3节)。

您的编译器警告您没有显式指定返回类型,并且控件在没有返回值的情况下到达非void函数的末尾。通过在代码中放置int main可以轻松解决前者问题。后者 - 即使main是规则的一个例外 - 同样可以通过以任何方式放入一个return语句来补救,只是为了与其他非void函数保持一致。

答案 3 :(得分:1)

C函数可以写成

<return type a> <function name>( <type 1> <parameter 1>, .. ) {
   ...

   return <element of type a>;
}

但是可以省略,但是根据编译器播放的规则集,建议指定返回类型。

答案 4 :(得分:1)

要解决这个问题,你需要int main()并返回0;最后:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int total = 81;
    float ratio = 1.618;

    char* result;
    asprintf (&result, "total: %i, ratio: %1.3f", total, ratio);

    printf ("%s \n", result);
    free (result);
    return 0; 
}
相关问题