【问题标题】:In C: Difference between main() and int main () [duplicate]在C中:main()和int main()之间的区别[重复]
【发布时间】:2012-11-12 15:58:11
【问题描述】:

可能重复:
difference between main(void) and main() in c

我知道这是超级基本的,其他一些线程已经讨论过类似的问题。但是我有一本书(C 绝对初学者指南),其中所有代码都写在函数 main() 中。 int 总是被排除在外。这怎么可能跑?使用旧版本的 stdio.h 可以吗?
下面是示例代码:

#include <stdio.h>

main()  // not int main()
{
printf("This is it\n");
return 0;
}

【问题讨论】:

  • 主要区别在于时间。 1984年,写main()还可以。在 2012 年,还不行,但许多编译器接受它是为了向后兼容。许多作者认为现在仍然是 80 年代中期。
  • @WilliamPursell - 这绝对不是那个问题的重复。这里的问题main(void)有任何关系。

标签: c


【解决方案1】:

这类问题高度依赖于标准版本,因此笼统的答案没有多大意义。

来自 C89 草案(如果官方 C89 标准不同,请纠正我,它不是免费提供的):

程序启动时调用的函数名为main。 实现没有声明这个函数的原型。 可以不带参数定义:

int main(void) { /*...*/ }

或带有两个参数(此处称为 argc 和 argv,尽管可以使用任何名称,因为它们是声明它们的函数的局部变量):

int main(int argc, char *argv[]) { /*...*/ }

C99 和 C11 标准的说法相同,但它们在 and 处添加了一些内容:

[...]

或等效的;[9] 或以其他实现定义的方式。

[9] 因此,int 可以替换为定义为 int 的 typedef 名称,或者 argv 的类型可以写为 char ** argv,依此类推。

一般来说,标准中没有定义的东西会导致未定义的行为,因此代码在 C89/C90 中是 UB,它可能在 C99 和 C11 中有效,但这是实现定义的.

P。 S.:如您所见,您还应该在参数列表中添加void,没有它的行为定义如上。

【讨论】:

    【解决方案2】:

    我认为 c89 标准将允许 main() 但 c99 及更高版本不允许。你必须使用 int main() 否则。

    【讨论】:

    • 我得到了 c99。现在,为什么我的编译器不喜欢它是有道理的。谢谢。
    • 顺便说一句,试试这本书的 C 语言:link
    • 其实你应该使用int main(void)
    【解决方案3】:

    main() 有效但令人困惑,在 C 中 main 函数总是返回一个 int 来指定退出状态,因此正确的语法是 int main(),但如果您不费心设置退出状态,那么 main()够了,但是好的C书总会有int main()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 2012-08-26
      • 2013-11-04
      • 2020-03-01
      • 2010-10-12
      • 2018-03-16
      • 2019-12-19
      相关资源
      最近更新 更多