C语言的程序里在main主函数之前需要啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言的程序里在main主函数之前需要啥?相关的知识,希望对你有一定的参考价值。
参考技术A 看什么编译器,有的编译器,可以默认包含stdio.h,就不用include而且,如果不用任何函数,所有编译器都可以不用include
比如
int
main()
int
a
=
1;
int
b
=
2;
int
c
=
a
+
b;
return
(c);
只有main就可以
主函数返回值错误?
【中文标题】主函数返回值错误?【英文标题】:Wrong returned value in main function? 【发布时间】:2019-11-07 16:46:52 【问题描述】:我之前读过 C 语言中的 0 表示假,而 1 表示真。 并且注意到 main 函数返回 0 但为什么呢?如果我的所有代码都成功运行,它应该返回 true (1)。 另一个相关的问题,我还是不明白谁可以使用returnable value?因为在我的程序中没有其他函数调用主函数,所以没有人知道我的程序是否运行良好。 我有点困惑。
【问题讨论】:
OS 询问 main.. 有什么问题吗?它返回错误代码 0.. 表示没有错.. 另外,谁可以使用返回的值?父进程可以..例如,如果您创建一个子进程并且它返回-1或其他值,则父进程可以知道它没有履行职责。 你的程序失败了吗?不,它没有......所以它返回零(又名假) 如果错误发生,则基本上 main 返回一个整数错误代码,否则为零(=NO ERROR ALL FINE)。如果在布尔表达式中这样使用,C 仍然将 1 解释为真,将 0 解释为假 C 函数返回 true/false 表示成功不是常见的约定。成功时返回 0 或失败时返回错误代码更为常见。 【参考方案1】:如果main
的返回值被解释为布尔值,您的逻辑将是有意义的,但事实并非如此。从初始调用返回到main
就像调用exit
函数:它向您正在运行的系统报告终止状态。
标准 C 指定了 3 种可移植退出状态:
0
,表示成功
EXIT_SUCCESS
,也表示成功
EXIT_FAILURE
,表示失败
(最后两个是<stdlib.h>
中定义的宏。)
在 Unix 上,允许任何 8 位值 (0 .. 255)。所有非零值都被解释为错误代码。对于任何给定数字的含义,没有通用约定,只是 0
代表成功,其他任何东西都代表某种失败。
至于谁可以使用返回值:在Unix上,父进程可以使用wait
或waitpid
来获取终止子进程的退出状态。
在 C 标准库中,执行操作的函数通常不返回真/假状态。 (islower
或 isdigit
之类的测试可以,但它们没有任何其他效果。)例如,remove
(删除文件)在成功时返回 0
,在错误时返回 -1
。这也是 Unix 系统调用的常见模式。例如,open
成功返回文件描述符(非负整数),-1
出错。
【讨论】:
【参考方案2】:这基本上是@Brandon 在 cmets 中已经说过的。
main
应该返回程序的exit/error code。在 Unix 约定中,0
用于表示没有错误(错误值为“false”)。然后用正值表示有错误,是什么错误。
【讨论】:
从未将 0 视为“错误值为假”。这是一种很好的思考方式。 不仅仅是积极的价值观。但也有负值。我已经看到程序在被杀死时返回 -9 或 -1 等 :) 但无论如何,我 +1。 @Brandon 不在 Unix 上。 还值得一提的是,如果您不指定返回值,这是唯一一个返回 0 的函数,并且它会从块的末尾脱落。【参考方案3】:这实际上只是你在程序完成时提出的那种问题。
案例一:
你失败了吗?
案例 2:
你通过了吗?
在第一种情况下,“好程序”将返回 false(也称为零)
在第二种情况下,“好程序”将返回 true(也就是非零)。
共识是使用案例 1,即“你失败了吗?”。因此,非失败程序返回零表示“我没有失败”。
这种方法的好处是可以使用非零值来表示不同类型的故障,而零总是“没有故障”
【讨论】:
【参考方案4】:C 语言认为true
(非零)或false
(零)与操作系统的值之间存在差异用于表示正常的程序终止。
严格来说,C 程序应该以EXIT_SUCCESS
的代码退出正常程序终止或EXIT_FAILURE
异常终止。 EXIT_SUCCESS
将映射到底层平台用来指示成功的任何代码,可能是也可能不是 0
。
【讨论】:
以上是关于C语言的程序里在main主函数之前需要啥?的主要内容,如果未能解决你的问题,请参考以下文章