我一直在尝试编译一段应该使用fork()函数创建进程的C代码。
#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几乎没有经验,所以我不知道这是什么原因造成的。有什么想法吗?
发布于 2013-01-22 03:46:51
将return 0;或类似的返回整数的表达式添加到main()的末尾,并将main()更改为int main(),我想您会发现代码运行良好。
当没有为main()指定返回类型时,它缺省为int。此外,使用已启用的编译器标志,不为main()指定类型会导致错误。
发布于 2013-01-22 03:48:12
问题是双重的(因为所有的警告都是错误的):
main应返回int,例如,实际上以return 0;main,即写入int main(,而不仅仅是main(.发布于 2013-01-22 03:50:41
您没有提到main函数的返回类型为void,所以gcc将其缺省设置为整数返回值。
由于GCC遵循ANSI标准,因此必须将main的返回类型指定为int like:
int main()
{
//Do stuff
return 0;
}记住编译器使用的标准很重要,否则你会继续犯这些错误,花更多的时间调试而不是做一些有效率的事情。
https://stackoverflow.com/questions/14446051
复制相似问题