[英]Hello world program gives an error on void in main
我在 Ubuntu 中使用 Emacs 输入了以下代码并使用命令行编译
#include <stdio.h>
int main(void)
{
printf("Hello World!\n\n");
return 0;
}
在 main 函数参数中有 void 返回以下警告
helloworld.c: In function ‘main’: helloworld.c:6:1: warning: control reaches end of non-void function [-Wreturn-type] } ^
当我删除括号内的“void”时,程序编译没有任何错误。 在这个程序中有main(void)
有什么不正确?
编译命令是gcc -Wall -ggdb helloworld.c -o hello
该错误与main()
的签名中的void
没有任何关系int main(void)
是正确的,并且是在不需要处理命令行参数时定义main()
的方法。
该错误意味着您定义了int main(void)
并且您没有从函数返回值。 像这样
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
}
在较新版本的gcc 中为main()
删除了此警告,因为main()
在程序退出时隐式返回0
,除非您用exit()
或main()
的显式返回另有指示。
普通函数仍会触发此警告,它有助于防止由于未从函数返回并尝试捕获返回值而导致的未定义行为。
警告可能是针对main()
函数的唯一方法是如果您没有 return 语句并且您正在 C89/C90 模式下编译。
从 C99 开始,不需要在main()
末尾的 return 语句,它会被假定为return 0;
如果控制从main()
的末尾返回。 所以在 c99 或 C11 模式下编译:
gcc -Wall -ggdb -std=c11 helloworld.c -o hello
这不会触发该警告。 或者,如果您在 c89/C90 中编译,请确保您有return
语句。 直到最近(至少到 gcc 4.9),gcc 中的默认模式是gnu90
。 因此,如果您不通过std=
您将在没有 return 语句的情况下收到该警告。
我想你实际上没有return 0;
在产生此警告的实际代码中,因为如果您有明确的return
语句,那么在什么 C 模式下编译它都无关紧要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.