main()函数可以返回double吗?
C程序中的main()
函数可以返回double
数据类型吗?
如果是 ,如何以及为什么?
如果不是 ,为什么?
是。 根据C标准,main() 应该返回一个int
值。 但不是必须的 。
看到这里 。
从C99
5.1.2.2.3程序终止如果main函数的返回类型是与int兼容的类型,则从初始调用到main函数的返回等同于调用exit函数,并将main函数返回的值作为其参数; 10)到达终止main函数的}返回值0.如果返回类型与int不兼容,则返回到主机环境的终止状态未指定
参考资料 – 5.1.2.2.3程序终止http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
我不知道如果main
返回双重意味着什么。 无论如何这里是gcc发生的事情:
double main () { return 0.0; }
$ cc double.c double.c:在函数'main'中: double.c:2:警告:'main'的返回类型不是'int' $ ./a.out $ echo $? 255 $
C说完全没问题。 另一方面,POSIX需要0到255之间的整数。通常, main()
应该返回EXIT_SUCCESS
或EXIT_FAILURE
的值,除非专门设置一个既不是但仍然在0到255之间的状态,以使状态有意义。
例如,返回114可能会告诉调用init脚本一些可以由脚本纠正的情况。
如果在POSIX OS下尝试从main()
返回3.14
,则调用进程几乎总是会看到255
。
我不确定其他的操作系统,但总的来说 – C会让你逃脱的并不总是与操作系统本身让你逃脱的东西一致:)这根本不是POSIX特有的。
名为main的函数充当C的托管实现中的程序的入口点必须返回int。 可以编写一个名为’main’ 的函数来返回一个double。 为了做到这一点,你让它静止,然后你自己买一个防弹背心,并可能雇用一些武装警卫; 如果有人必须保持如此怪异,你就需要它们。
如果您处于托管环境中(即通常在PC上),则返回值类型是固定的,如前所述。 如果在独立环境中运行,则可以返回不同的值类型。 在为微控制器编程时通常会出现一个独立的环境,因为没有操作系统(您创建一个直接在硬件上运行的大型二进制文件)。 但是,在这种情况下,main的通常原型将是void main(void)
。
但是返回像double
这样的不同类型有什么意义呢? 除非调用者(即操作系统)可以使用返回值执行某些操作,否则它是没有意义的,并且由于调用者无法知道返回值的类型,因此必须对其进行修复。