25

私は C の学習を開始した Linux ユーザーで、入力したこのソースをコンパイルしようとしています。

#include <stdio.h>
main()
{
        float c,d;
        c = 10215.3;
        d = c / 3;
        printf("%3.2f\n",d);
        return 0;
}

私が書いたメイクファイルを使用してこれでコンパイルされました:

cc -Wall -g     printf.c   -o printf

しかし、私はこの警告を受けています:

printf.c:2:1: 警告: 戻り型のデフォルトは 'int' [-Wreturn-type]

コードがコンパイルされ、目的の出力が得られますが、これが何を意味するのかを理解したい

4

3 に答える 3

35
main()

する必要があります

int main()

C89 では、デフォルトの戻り値の型は であると想定されているintため、機能します。

于 2012-09-11T15:50:58.837 に答える
4

C89 では、デフォルトの戻り値の型はintです。このデフォルトは C99 で削除され、コンパイラは、 main()の前にintがない C スタイルが時代遅れであることを思い出させるのに役立ちます。

C89 仕様のセクション 3.5.2「型指定子」を参照してください。

  • 「型指定子の各リストは、次のセットのいずれかでなければなりません: [...] + intsignedsigned intまたは型指定子なし".

  • そしてセマ​​ンティクスの 2 番目の段落では、「[...] セットのそれぞれは、ビットフィールド [blabla] を除いて、同じ型を指定します」。したがって、これは「型指定子なし」がintと同じであることを意味します。

C99 では、「型指定子がないか」という部分が削除されています。(ただし、 int部分なしでsignedを書くことはできます。)

于 2015-07-28T10:13:50.130 に答える