0

関数Cを使用してプロセスを作成するコードをコンパイルしようとしています。`fork()

#include <stdio.h>
#include <unistd.h>
main()
{
    int n=15, z=20, count=3, mult=1;
    while(count<3)
    {
        if(z!=0)
        {
            z=fork();
            n=n+15;
        }
        else
        {
            z=fork(); n=n+10; mult=mult*n;
        }
        printf(" z=%d   mult=%d",z,mult);
        count=count+1;
    }
}

ターミナルでコンパイルさ"gcc -Wall -W -Werror main.c -o ProcessCreateC"れます。エラーが発生しました:

main.c:3:5: error: return type defaults to ‘int’ [-Werror=return-type]
main.c: In function ‘main’:
main.c:20:5: error: control reaches end of non-void function [-Werror=return-type]
cc1: all warnings being treated as errors

私はWindowsでのコンパイルの経験しかなく、の経験もほとんどないのでLinux、これを引き起こしている原因がわかりません。何か案は??

4

3 に答える 3

2

return 0;main()の最後に整数を返すまたは同様の式を追加し、に変更main()するint main()と、コードが正常に機能することがわかると思います。

main()に戻り型が指定されていない場合、デフォルトでintになります。さらに、有効にしたコンパイラフラグを使用して、main()のタイプを指定しないと、エラーが発生します。

于 2013-01-21T19:46:51.033 に答える
0

main関数の戻り型をvoidとして言及していないため、gccはデフォルトで整数の戻り値に設定しています。

GCCはANSIC標準に準拠しているため、mainの戻りタイプを次のようにintとして指定する必要があります。

int main()
{
    //Do stuff
     return 0;
}

コンパイラーが使用する標準を覚えておくことが重要です。そうしないと、生産的なことをするよりも、これらの間違いを犯し続け、デバッグに多くの時間を費やすことになります。

于 2013-01-21T19:50:41.487 に答える
0

問題は2つあります(すべての警告はエラーであるため):

  1. mainintを返す必要があります。たとえば、実際にはで終了します。return 0;
  2. だけでなく、mainintを返すこと、つまりwriteについて明示的にする必要があります。int main(main(
于 2013-01-21T19:48:12.350 に答える