【问题标题】:How does int main() and void main() work? [duplicate]int main() 和 void main() 是如何工作的? [复制]
【发布时间】:2013-09-26 12:30:31
【问题描述】:

我是 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() return 0 编写一个简单的 Hello, World! 程序时,它仍然给我与使用 void main()) 时相同的输出,那么它是如何工作的呢?它的应用是什么?

【问题讨论】:

  • void main() 主要用于表明您正在使用由不太了解 C 语言的人编写的教科书。在您列出的表格中,只有int main(void) 有效。 (这不是相当那么简单,但现在已经足够接近了。)

标签: c void


【解决方案1】:

如果你真的想了解 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 中,例如) 您将收到一条警告,表明您的 main 函数是 void 类型而不是 int 类型,但您将能够运行该项目。 大多数 C 开发人员倾向于在其所有变体上使用 int main(),尽管 void main() 也可以编译。

【讨论】:

    【解决方案2】:

    main()void main() 都不是标准 C。前者是允许的,因为它具有隐式的 int 返回值,使其与 int main() 相同。 main 的返回值的目的是向操作系统返回一个exit status

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

    int main(void)
    

    int main(int argc, char **argv)
    

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

    【讨论】:

    • 在恢复中,它们只允许与操作系统不需要退出状态时编写的旧 C 代码向后兼容。您总是应该在main 中返回一个整数值
    • @Jack: void main() 不是为了向后兼容任何东西。最初引入void 关键字的同一标准将main 的返回类型定义为int
    • int main(int argc, const char **argv, const char **env)
    • @dns,不在标准 C 中。不过,实现可以定义任何它喜欢的东西。
    猜你喜欢
    • 2018-03-16
    • 2016-07-24
    • 2013-11-04
    • 2010-10-12
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多