c - 所有主要功能有什么区别?
问题描述
C中的main,void main和int main有什么区别?他们每个人都做什么?还有什么是 return 0; 用于?我知道它以某种方式告诉操作系统该程序已成功完成,但它必须提供什么?我想指出,我在 C 上工作了一个多月,所以我没有真正的经验
解决方案
5.1.2.2.1 程序启动
1 程序启动时调用的函数名为main
。实现没有声明这个函数的原型。它应定义为返回类型为 int 且不带参数:
或带有两个参数(这里称为int main(void) { /* ... */ }
argc
andargv
,尽管可以使用任何名称,因为它们对于声明它们的函数是本地的):
或同等学历; 10)或以其他一些实现定义的方式。int main(int argc, char *argv[]) { /* ... */ }
10) 因此,int
可以替换为定义为 的 typedef 名称int
,或者argv
可以写为 的类型char ** argv
,依此类推。
main()
相当于int main(void)
。在该语言的早期版本中,如果您定义了一个没有显式返回类型的函数,编译器会假定它返回int
. 此外,如果您定义一个没有任何参数的函数,这意味着该函数不带任何参数。不再允许隐式类型,使用原型语法可以让您在编译时捕获参数数量和类型的错误,因此不应再使用这种形式。
void main()
不是标准的,除非您的实现明确将其记录为main
(“或以某种其他实现定义的方式”)1的有效签名,否则不应使用。否则,使用它会导致未定义的行为,这可能会导致您的代码在启动或退出时行为异常。有些平台运行时没有明显问题,但你不应该相信这是真的。
5.1.2.2.3 程序终止
1 如果main
函数的返回类型是与 兼容的类型int
,则从函数的初始调用返回main
相当于以exit
函数返回的值main
作为参数调用函数;11)到达}
终止main
函数返回值0。如果返回类型与 不兼容int
,则返回到宿主环境的终止状态未指定。
11) 根据 6.2.4,在前一种情况下声明了自动存储持续时间的对象的生命周期main
将结束,即使在后者中它们不会有。
C 程序向运行时环境返回一个状态码 - 在 *nix 和类似平台上,返回码 0 表示成功、正常程序终止。 stdlib.h
定义宏EXIT_SUCCESS
和EXIT_FAILURE
,应该使用它来代替文字数值:
#include <stdlib.h>
...
int main( void )
{
...
if ( something_bad_happens )
return EXIT_FAILURE;
...
return EXIT_SUCCESS;
}
- 即使那样,我也不会使用它,因为它保证是不可移植的。
推荐阅读
- java - 组件 tJavaFlex_1(时间)中的异常 java.lang.ArrayIndexOutOfBoundsException: 1 javatflex 和 tmemorizerows
- tensorflow - Tensorflow:对 LSTM 的期望
- python - 有没有办法在不声明的情况下调用变量
- python - 应用 .nsmallest(2) 后计算 Pandas 中 Groupby 对象的平均值
- linux - 在 yocto 中设置不同任务的优先级?
- firebase - 如何从firestore子集合中获取数据
- javascript - 带有数据库内容的 javascript 参数
- flutter - 如何从存储中读取文件 txt (Flutter)?
- java - 将 json 转换为字符串变量
- c# - LINQ 嵌套和/或 cosmos db