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