17

我是 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() - 函数什么也不返回,等等。

当我写一个简单的Hello, World!使用 int main() 的程序返回 0,它仍然给我与使用 void main()) 时相同的输出,那么它是如何工作的呢?它的应用是什么?

4

2 回答 2

26

既不是标准 Cmain()也不void main()是标准 C。前者是允许的,因为它具有隐式int返回值,使其与int main(). main的返回值的目的是向操作系统 返回退出状态。

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

int main(void)

int main(int argc, char **argv)

您正在使用的表单:int main()是一种旧式声明,表示main采用未指定数量的参数。不要使用它 - 选择上述之一。

于 2013-09-21T02:25:42.260 回答
15

如果您真的想了解 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(int argc, char * argv[])

  • 当您的程序需要加载初始参数(从操作系统接收到的参数 - 在它自己的程序之外)时,您需要使用此功能。

关于void main()

在 ANSI C 89 中,当使用void main和编译项目 AS -ansi -pedantic(例如在 Ubuntu 中)时,您将收到一条警告,指出您的主函数是 void 类型而不是 int 类型,但您将能够运行该项目。大多数 C 开发人员倾向于int main()在其所有变体上使用,尽管void main()也会编译。

于 2014-08-17T07:44:23.500 回答