【问题标题】:Isn't void in int main(void) redundant? [duplicate]int main(void) 中的 void 不是多余的吗? [复制]
【发布时间】:2015-05-15 06:50:25
【问题描述】:

我拥有的C99标准文档明确指出

6.7.5.3.14 标识符列表仅声明函数参数的标识符。 作为该函数定义一部分的函数声明器中的空列表指定该函数没有参数。 不属于该函数定义的函数声明器中的空列表指定该函数没有提供有关参数数量或类型的信息。

我从那句话中的理解是,在函数定义中写 void 是多余的。我没听错吗?

【问题讨论】:

  • main() 是一个特例,see here 用于讨论特定于main

标签: c main


【解决方案1】:

不,你有点错了。

  • void 表示绝对没有传递任何参数。
  • 空括号() 表示可以使用任何 个参数调用函数,而不会产生警告。

注意:请记住,main() 的实现没有定义或提供原型

也许,C11 标准,第 5.1.2.2.1 章,描述它更好的方式,

程序启动时调用的函数名为main。实现没有声明这个函数的原型。它应使用int 的返回类型定义并且不带参数:

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

或带有两个参数(此处称为argcargv,尽管可以使用任何名称,因为它们是声明它们的函数的本地名称):

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

或等效;10) 或以其他一些实现定义的方式。

【讨论】:

  • 原型位是这里的重要部分。如果在 int main(void); int main() { ... } 中的函数定义之前有一个函数原型(也就是不是函数定义一部分的函数声明符),那么显然 C99 6.7.5.3p14(或等效的 C11 6.7.6.3p14)将是适用。
猜你喜欢
  • 2018-03-16
  • 2013-09-26
  • 1970-01-01
  • 2010-10-12
  • 2020-03-01
  • 2016-07-24
  • 2012-03-10
  • 2016-01-05
  • 1970-01-01
相关资源
最近更新 更多