【发布时间】:2014-07-23 14:46:27
【问题描述】:
我从main()的以下定义开始编程
void main(){}
然后有人告诉我 main() 的这种格式是不好的编程,因为它应该返回 int。他还告诉我,以下 main() 的定义在 C 中是有效的。
int main(void){}
或
int main(int argc,int *argv[]){}
今天我尝试使用其他数据类型进行实验,令人惊讶的是,以下所有编译都没有错误。
char main(){}
float main(){}
int* main(){}
甚至编译成功
struct Abc{
int a;
};
struct Abc* main(){}
所以我对此的问题如下:
操作系统如何处理这些意外的返回类型? [我问这个是因为我认为操作系统使用了
main()的返回值]为什么
main()可以返回任意类型?为什么编译器设计者说 "
main()应该返回 int" 我认为如果他们说 "main()必须返回没有问题int"?
【问题讨论】:
-
所以不,main 的返回值通常不是“被操作系统使用”的。
-
@fast:是的,它肯定被操作系统使用,或者至少被操作系统提供。在类 UNIX 系统上,从 shell 执行程序后,它的返回值是
$?,用于流控制。 Windows 的行为类似。 -
我认为问题源于预期,操作系统喜欢以某种方式解释 main 的返回值;我仍然会说它没有(虽然是的,将它解释和传播为 int)
标签: c