2010-05-23 130 views
12

C程序中的main()函数是否可以返回double数据类型?main()函数可以返回double吗?

如果,如何以及为什么?

如果,为什么?

+4

我必须问,为什么downvote?这是一个完全合法的问题。 +1。 – Warty 2010-05-23 06:39:26

+0

Dupe http://stackoverflow.com/questions/204476/what-should-main-return-in-cc – 2010-05-23 10:05:58

+0

另请参阅 - https://softwareengineering.stackexchange.com/questions/203104/why-cant-main-return -a-double-or-string-rather-int-or-void – roottraveller 2017-09-11 11:18:53

回答

6

是的。根据C标准,主()应该返回一个int值。但不是必须

See here

+0

也许它更像是一种传统的东西。如果一个应用程序可能返回一个char [],int []等等,这将会让人困惑...... – Warty 2010-05-23 06:43:55

+1

@ItzWarty:你*不能*返回一个char []或者int []或者除了原始数据类型以外的任何东西。它的内存将被存储?这些是指针,他们指向*某处*。如果程序已被销毁,这个数组将被存储在哪里? – 2010-05-23 07:03:00

+0

@Comp,操作系统允许您将从main返回的char [] []复制到父进程中是完全可行的。这在将int返回代码传递回父节点(不同的存储需求但是完全相同的方法)中没有区别。 – paxdiablo 2010-05-23 07:26:31

0

我不知道这是什么意思,如果main返回加倍。反正这里是用gcc会发生什么:

double main() 
{ 
    return 0.0; 
} 
 
$ cc double.c 
double.c: In function 'main': 
double.c:2: warning: return type of 'main' is not 'int' 
$ ./a.out 
$ echo $? 
255 
$ 
+0

什么是$?在这之后? – 2010-05-23 06:47:13

+0

@Precision:注意到 – 2010-05-23 06:55:12

+0

@Snake Plissken:非常有趣。我想知道这是为什么。 – 2010-05-23 07:12:14

0

命名主要充当程序的托管执行的C必须返回一个int的入口点函数。有可能写一个a名为'main'的函数返回一个double。要做到这一点,你要把它变成静态的,然后你给自己买一件防弹背心,并且可能雇用一些武装警卫;如果有人要维护这样的怪物,你就需要它们。

3

从C99

5.1.2.2.3计划终止 如果主函数的返回类型为int一个 类型兼容,从最初的调用的返回 到主 功能等同于调用​​带值的 出口功能由主函数作为其 参数返回 ; 10)到达}中 终止。如果返回类型不是 兼容无线主函数返回0 值日INT,终止 状态返回到主机 环境是不确定的

参考这里 - 5.1.2.2.3计划终止 http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

0

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

但是返回不同的类型如double有什么意义?除非调用者(即操作系统)可以用返回值做某件事情,否则毫无意义,并且由于调用者无法知道返回值的类型,所以必须修复它。

1

C说它非常好。另一方面,POSIX需要0到255之间的整数。通常,main()应返回值EXIT_SUCCESSEXIT_FAILURE,除非专门设置了一个状态,该状态不是但仍在0 - 255之间以使状态有意义。

例如,返回114可能会告诉调用初始化脚本有关可通过脚本纠正的某些情况。

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

我不确定其他操作系统,但一般情况下 - C可以让你逃避的东西并不总是与操作系统本身允许你放弃的东西一致:)这完全不是POSIX特有的。

相关问题