首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >int main()和int main(void)之间的区别?

int main()和int main(void)之间的区别?
EN

Stack Overflow用户
提问于 2012-09-01 13:30:33
回答 9查看 74.4K关注 0票数 63

以下是什么意思:

int main(void) {...} 

VS

int main() {...}

我认为int main() {...}意味着main不会(从命令行)接收任何参数:

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

确实如此。

但是,int main(void) {...}是什么意思呢?那么,void代表什么呢?

我看过here,但不知何故这是另一个问题。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-09-01 13:38:05

在C++中,这是没有区别的。

在C中,这种区别是值得怀疑的。有些人喜欢争辩说,后者(没有void的版本)在技术上只是一个常见的实现扩展,由于标准中的措辞,不能保证标准能正常工作。然而,该标准明确指出,在函数定义中,空的参数集具有定义良好的行为:函数不接受任何参数。因此,main的这种定义与标准中的以下描述相匹配:

It main应定义为int的返回类型,并且不带参数。

然而,两者之间有一个明显的区别:即,没有void的版本无法为函数提供正确的原型:

// this is OK.
int main()
{
  if (0) main(42);
}

// this requires a diagnostic to be shown during compiling
int main(void)
{
  if (0) main(42);
}

哦,顺便说一句:void在所有函数声明符中都有以下含义:

(6.7.6.3p10)将类型为

的未命名参数作为列表中唯一项的特殊情况指定函数没有参数。

票数 54
EN

Stack Overflow用户

发布于 2015-07-10 16:48:37

首先,托管系统和独立系统是不同的,比如shown here

对于托管系统,5.1.2.2.1程序启动适用于:

在程序启动时调用的函数名为

。该实现没有声明此函数的原型。它应该定义为int的返回类型,并且没有参数:

int main(void)

..。(有关argv/argc等样式的更多文本如下)。

有趣的部分是“没有参数”。int main()int main (void)目前是等价的,因为它们都是函数声明符,并且没有参数。以下内容适用于(6.7.6.3 ):

10将类型为空的未命名参数作为列表中唯一项的特殊情况指定函数没有参数。

/--/

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

强调我的观点,粗体文本适用于int main()。在正文末尾还有注释145),其中写道:“见‘’未来语言方向‘’(6.11.6)‘”:

6.11.6函数声明符

使用带有空括号的函数声明符(不是原型格式的参数类型声明符)是一个过时的特性。

这就是不同之处。作为一个函数声明者,由于上面的原因,int main()糟糕的风格,因为它不能保证在下一个版本的C标准中工作。它在C11中被标记为过时的功能。

因此,您应该在托管系统上始终使用int main (void),并且永远不要使用int main(),即使目前这两种形式是等效的。

在C++中,这两种形式是完全相同的,但出于主观的、美观的原因,int main()是首选的样式(Bjarne Stroustrup说是这样的……这可能是一个相当糟糕的理由来解释为什么你以一种特定的方式做某事)。

票数 6
EN

Stack Overflow用户

发布于 2012-09-01 13:37:57

在C中,在原型中(不是在C++中),空的参数列表意味着函数可以接受任何参数(在函数的定义中,它意味着没有参数)。在C++中,空的参数列表表示没有参数。在C中,为了不获取参数,你必须使用void。有关更好的解释,请参阅this问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12225171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档