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

在 main() 的末尾添加return 0;或返回整数的类似表达式,然后更改main()int main(),我想您会发现代码可以正常工作。

当没有为 main() 指定返回类型时,它默认为 int。此外,使用您启用的编译器标志,不为 main() 指定类型会导致错误。

于 2013-01-21T19:46:51.033 回答
0

问题是双重的(因为所有警告都是错误):

  1. main应该返回 int,例如实际上以return 0;
  2. 您应该明确main返回 int,即 write int main(,而不仅仅是main(.
于 2013-01-21T19:48:12.350 回答
0

您没有提到 main 函数的返回类型为 void,因此 gcc 将其默认为整数返回值。

由于 GCC 遵循 ANSI C 标准,因此您必须将 main 的返回类型指定为 int,例如:

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

记住编译器使用的标准很重要,否则您将继续犯这些错误并花费更多时间进行调试而不是做一些富有成效的事情。

于 2013-01-21T19:50:41.487 回答