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_SUCCESSEXIT_FAILURE的值,除非专门设置一个既不是但仍然在0到255之间的状态,以使状态有意义。

例如,返回114可能会告诉调用init脚本一些可以由脚本纠正的情况。

如果在POSIX OS下尝试从main()返回3.14 ,则调用进程几乎总是会看到255

我不确定其他的操作系统,但总的来说 – C会让你逃脱的并不总是与操作系统本身让你逃脱的东西一致:)这根本不是POSIX特有的。

名为main的函数充当C的托管实现中的程序的入口点必须返回int。 可以编写一个名为’main’ 函数来返回一个double。 为了做到这一点,你让它静止,然后你自己买一个防弹背心,并可能雇用一些武装警卫; 如果有人必须保持如此怪异,你就需要它们。

如果您处于托管环境中(即通常在PC上),则返回值类型是固定的,如前所述。 如果在独立环境中运行,则可以返回不同的值类型。 在为微控制器编程时通常会出现一个独立的环境,因为没有操作系统(您创建一个直接在硬件上运行的大型二进制文件)。 但是,在这种情况下,main的通常原型将是void main(void)

但是返回像double这样的不同类型有什么意义呢? 除非调用者(即操作系统)可以使用返回值执行某些操作,否则它是没有意义的,并且由于调用者无法知道返回值的类型,因此必须对其进行修复。