int main()和void main()是如何工作的?

18
我是一名C语言初学者。有人能否用示例详细解释main(),int main(),void main(),main(void),void main(void),int main(void)在C语言中的工作原理?
也就是说,当我们使用void main()时发生了什么,当我使用int main()时又发生了什么,以简单的语言说明等等。
我知道,但我不明白它在做什么:
1. main() - 函数没有参数 2. int main() - 函数返回int值 3. void main() - 函数不返回任何值,等等。
当我使用int main()返回0编写一个简单的Hello, World!程序时,它仍然给出与使用void main()相同的输出,那么它是如何工作的?它的应用是什么?

6
void main() 主要用于表明你正在使用一本由不太熟悉C语言的人编写的教材。在你列举的形式中,只有 int main(void) 是有效的。(虽然事实并非如此简单,但现在已经足够接近了。) - Keith Thompson
2个回答

28

main()void main()都不是标准的C语言。前者被允许是因为它有一个隐含的int返回值,使其与int main()相同。 main的返回值的目的是向操作系统返回退出状态

在标准C中,main的唯一有效签名是:

int main(void)

int main(int argc, char **argv)

你正在使用的表单:int main() 是一种旧式声明,表示main接受未指定数量的参数。不要使用它 - 请从上面选择一个。

1
简而言之,它们只允许与旧的C代码向后兼容,当操作系统不需要退出状态时编写。您应该始终在“main”中返回整数值。 - Jack
4
@Jack说:void main()并不是为了与任何东西保持向后兼容性。最初引入void关键字的标准定义了main函数的返回类型为int - Keith Thompson
int main(int argc, const char **argv, const char **env) - dns
@dns,不是标准C语言。但实现可以定义任何它想要的内容。 - Carl Norum

16

如果你真的想了解 ANSI C 89,我需要纠正你一个错误;在 ANSI C 89 中,以下函数之间的区别:

int main()
int main(void)
int main(int argc, char* argv[])

是:

int main()

  • 一个函数,期望接受未知数量和类型的参数,返回表示应用软件状态的整数。

int main(void)

  • 一个函数,不接受任何参数,返回表示应用程序状态的整数。

int main(int argc, char * argv[])

  • 一个函数,期望接受argc个参数和argv []参数。返回表示应用程序状态的整数。

关于何时使用每个函数

 

int main(void)

  • 当您的程序需要没有初始参数运行/加载(从操作系统接收的参数-程序本身之外)时,您需要使用此函数。
 

int main(int argc,char * argv [])

  • 当您的程序需要初始参数进行加载(从操作系统接收的参数-程序本身之外)时,您需要使用此函数。

关于void main()

在ANSI C 89中,如果使用void main并编译项目AS-ansi -pedantic(例如在Ubuntu中),您将收到警告,指示您的主函数是void类型而不是int类型,但是您仍然可以运行该项目。大多数C开发人员倾向于在所有变体中使用int main(),尽管void main()也可以编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接