Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否需要在Main()中返回值?_C_Return Type - Fatal编程技术网

C 是否需要在Main()中返回值?

C 是否需要在Main()中返回值?,c,return-type,C,Return Type,我正在写一个快速的程序来计算一些事情,这时我遇到了C程序的return语句/exit语句 我将main()声明为int类型,因此我必须输入一个整数的返回值,否则我的程序将无法正确编译。但是,将main设置为Boolean或甚至void是否可以接受 我知道创建C程序的标准方法是返回一个值,这样任何问题都可以解决,但是布尔值不是同样的方法吗?另外,我可以声明它void,并且在程序终止后操作系统仍在运行时不会出现问题吗 感谢所有帮助。C99标准规定:(§5.1.2.2.1程序启动) 程序启动时调用的函

我正在写一个快速的程序来计算一些事情,这时我遇到了C程序的return语句/exit语句

我将
main()
声明为
int
类型,因此我必须输入一个整数的返回值,否则我的程序将无法正确编译。但是,将
main
设置为
Boolean
或甚至
void
是否可以接受

我知道创建C程序的标准方法是返回一个值,这样任何问题都可以解决,但是
布尔值
不是同样的方法吗?另外,我可以声明它
void
,并且在程序终止后操作系统仍在运行时不会出现问题吗

感谢所有帮助。

C99标准规定:(§5.1.2.2.1程序启动)

程序启动时调用的函数名为main。实现声明没有 此功能的原型。它应定义为int的返回类型,并且没有 参数:

int main(void) { /* ... */ }
或者使用两个参数(此处称为argc和argv,但可以使用任何名称) 使用,因为它们是声明它们的函数的本地函数):

或同等品;或者以其他实现定义的方式

因此,在托管环境中,
int
是唯一有效的标准返回类型。不过,实现可以定义其他入口点

请注意,第§5.1.2.2.3节“计划终止”有以下内容:

如果主函数的返回类型是与int兼容的类型,则 对main函数的初始调用相当于使用值调用exit函数 由main函数返回作为其参数到达终止 main函数返回值0。如果返回类型与int不兼容,则 返回到主机环境的终止状态未指定

因此,在C99中,只要
main
返回
int
,那么省略
main
的返回值是合法的
(但是以前版本的C标准对
main
没有例外-不返回任何值(或者在没有返回语句的情况下到达最终的
}
)会导致“返回到主机环境的终止状态[未定义]。

调用main()的代码希望它返回int(或调用exit())。无法更改调用main()的代码(它是操作系统或运行时的一部分),因此最好返回int。

下面是一个可能会引起兴趣的示例。看来你问题的答案不是那么直截了当。我还看到编译器(MS Visual C)接受
void
作为返回类型。

根据ISO,标准是返回int。请参阅本文档第5.1.2.2.1节:。同样有趣的是Stroustrup对这件事的评论,它与C和C++都相关:。

返回类型必须是
int
,其他答案也包括了这一点。但是,您认为必须返回一个值的假设是错误的,
main
是一个例外。C99标准规定了这一点,因此在ANSI C中实现main而不使用
return

main()
通常具有
int
的返回类型,但它实际上可以由实现定义;这意味着不同的编译器和平台接受不同的签名,但标准保证
intmain()
intmain(int,char**)
格式良好

它不同于其他非void函数,因为它不需要
return
语句。如果未提供任何值,并且返回类型指定为
int
,则编译程序时就好像存在隐式
返回0一样
main()
中的最后一条语句之后

本标准的相关部分:

5.1.2.2.3计划终止

1如果
main
函数的返回类型与
int
兼容,则从 对
main
函数的初始调用相当于使用值调用
exit
函数 由
main
函数返回作为其参数;到达终止请求的
}
main
函数返回值
0
。如果返回类型与
int
不兼容,则 返回到主机环境的终止状态未指定


请不要引用我的话,但是在K+R中,情况有点松散,我认为您甚至不需要指定返回类型,因此
main(){}
实际上是一个有效的K+R程序。

摘要:您不必这样做,但应该这样做

在C90中,到达
main()
的末尾,而不执行
return
语句“返回到主机环境的终止状态未定义”。在我使用过的至少一个系统上,返回的状态为1,这表示该系统上的程序失败

C99添加了一个新规则,表示到达
main()
的末尾返回0。(C++有相同的规则。)并不是所有的编译器都完全实现C99,而且那些实现C99的编译器在默认情况下通常不会表现为一致的C99编译器

main()
返回的可移植值只有0、
EXIT\u SUCCESS
EXIT\u FAILURE
(后两个值在
中定义。0和
EXIT\u SUCCESS
表示程序成功(而
EXIT\u SUCCESS
通常定义为0)
EXIT_FAILURE
表示程序失败。
return 1;
很常见,但不可移植;我在一个系统(VMS)上工作过,其中终止状态为1表示成功。如果希望程序可移植,请使用
EXIT_FAILURE
表示失败;这就是原因
int main(int argc, char *argv[]) { /* ... */ }
int main(void) { /* ... */ }
int main(int argc, char *argv[]) { /* ... */ }