C/C+中void main和int main之间的差异+;? < >我在C++(或C)程序中声明主< /代码>函数有什么关系? < p>区别是一个正确的定义代码>主< /代码>,另一个不是。

C/C+中void main和int main之间的差异+;? < >我在C++(或C)程序中声明主< /代码>函数有什么关系? < p>区别是一个正确的定义代码>主< /代码>,另一个不是。,c++,c,function,standards,main,C++,C,Function,Standards,Main,是的,这很重要。或者 int main(int argc, char** argv) 或 >是C++代码> < /P>的主< /代码>的正确定义 void main(int argc,char**argv) 是,而且是IIc,是一个与旧微软的C++编译器一起出现的错误。 对于C++,只有int是允许的。对于C,C99表示只允许int。先前的标准允许无效返回 简而言之,始终int您应该使用intmain。C和C++标准都规定主< /C>应该返回一个值。 < P>如果你要按规范,那么你应该总是声

是的,这很重要。或者

int main(int argc, char** argv)

<> >是C++代码> < /P>的<代码>主< /代码>的正确定义
void main(int argc,char**argv)

是,而且是IIc,是一个与旧微软的C++编译器一起出现的错误。


对于C++,只有int是允许的。对于C,C99表示只允许int。先前的标准允许
无效
返回


简而言之,始终
int

您应该使用
intmain
。C和C++标准都规定<代码>主< /C>应该返回一个值。

< P>如果你要按规范,那么你应该总是声明<代码>主< /代码>返回一个<代码> int <代码> < < /P> <>实际上,大多数编译器都会让你逃脱其中的任何一个,所以真正的区别是如果你想/需要返回一个值到shell。

点,C程序(和C++相同)总是(应该)返回一个成功值或错误代码,所以他们应该这样声明。

很久以前,我发现其中包含了许多“标准说它无效”论点之外的原因。在特定的操作系统/体系结构中,它可能导致堆栈损坏,或者其他讨厌的事情发生。C++中的

< P> >代码>主())/Cuff>必须返回<代码> int <代码>。但是,C99允许
main()
具有非
int
返回类型。以下是C99标准的摘录

5.1.2.2.1程序启动

程序启动时调用的函数名为main。实现声明没有 此功能的原型。它应定义为int返回类型,且不包含 参数:

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

或者使用两个参数(此处称为argc和argv,但可以使用任何名称) 使用,因为它们是声明它们的函数的本地函数):

intmain(intargc,char*argv[]){/*…*/}

或同等品或以某种其他实现定义的方式

还要注意的是,gcc确实编译
voidmain()
,尽管实际上,它执行
返回0在遇到右括号时。

非常清楚地说明了这一点:

<> >定义>代码>空()/>代码>不是C++,也不是C.</P>
请参阅。

int main(void)在性质上也是正确的,虽然这没关系,但我认为int main()比int main(void)更可取。您应该始终尝试“按规范”做事,除非有令人信服的理由不这样做。当然,很多实现都允许voidmain和其他扩展。这并不意味着您应该依赖于特定于实现的扩展。在没有外壳的嵌入式应用程序中,voidmain是可以的。我同意所有这些。有一段时间,我养成了使用void vs int作为一种伪注释的习惯,关于我是否希望返回值,但现在我总是使用int。为什么做错误的事情(在某些情况下,它正好起作用)有价值,而正确的事情是更多的工作?@Tom:因为。。。正确的做法是更多的工作?我不确定那个句子的语法是否正确。@Ahoy-我漏掉了一个关键单词。。。C89也需要返回一个int,意思是“…当正确的事情不再需要工作时”。但是,
gcc-pedantic将拒绝它。而不使用
-pedantic
就是一团糟。如果您依赖于实现定义的行为,那么您的程序就不符合标准。您的编译器可能会接受它,但它不是有效的C99,只是foo-C99。@Konrad Rudolph嘿,如果我们没有使用
gcc-pedantic
,这是否意味着我们没有使用标准C?其次,如果你能告诉我它是在哪里写的,我将不胜感激。@Jed嘿,如果我们没有使用
gcc-pedantic
,这是否意味着我们没有使用标准C?第二,如果你能告诉我它写在哪里,我将不胜感激。我总是至少使用
-pedantic
,或
-pedantic错误。绝对没有理由使用不正确的返回类型,它只是草率的(但请注意,独立的C实现有不同的入口点函数!)。是吗?谁会在你的火星漫游者裸机设备中使用该返回码这是一个有用的问题——作为一个禅宗教士。
int main()