为什么在C中有这么多不同类型的main()代码

为什么在C中有这么多不同类型的main()代码,c,C,我看到不同的人为声明main()编写不同的语句 像 我是说什么时候传论点?它需要什么?何时将int声明为返回类型,何时为void 我刚开始练习编码,当我看到人们编写不同的main()声明时,我真的感到困惑。来自C标准: 5.1.2.2.1程序启动 程序启动时调用的函数名为main。实现声明没有 此功能的原型。它应定义为int返回类型,且不包含 参数: int main(void){/*…*/} 或者使用两个参数(此处称为argc和argv,但可以使用任何名称) 已使用,因为它们在声明它们的函数中

我看到不同的人为声明main()编写不同的语句

我是说什么时候传论点?它需要什么?何时将int声明为返回类型,何时为void

我刚开始练习编码,当我看到人们编写不同的main()声明时,我真的感到困惑。

来自C标准:

5.1.2.2.1程序启动 程序启动时调用的函数名为main。实现声明没有 此功能的原型。它应定义为int返回类型,且不包含 参数:
int main(void){/*…*/}
或者使用两个参数(此处称为argc和argv,但可以使用任何名称) 已使用,因为它们在声明它们的函数中是本地的):
int main(int argc,char argv[]){/..*/}
或同等品;10) 或者以其他实现定义的方式

因此,为了回答您的问题,您编写的第一个和第三个表单是相同的(将void作为参数列表写入是Kernigan和Richie的C中的一个痕迹,它可以防止声明中出现未指定的参数列表。在那些日子里,空参数列表允许调用站点上出现任意参数列表)

第二个是实现定义的,您错过了最后一个,您在其中指定了参数(
argc
argv
),这些参数在程序执行时由提供的参数填充。

来自C标准:

5.1.2.2.1程序启动 程序启动时调用的函数名为main。实现声明没有 此功能的原型。它应定义为int返回类型,且不包含 参数:
int main(void){/*…*/}
或者使用两个参数(此处称为argc和argv,但可以使用任何名称) 已使用,因为它们在声明它们的函数中是本地的):
int main(int argc,char argv[]){/..*/}
或同等品;10) 或者以其他实现定义的方式

因此,为了回答您的问题,您编写的第一个和第三个表单是相同的(将void作为参数列表写入是Kernigan和Richie的C中的一个痕迹,它可以防止声明中出现未指定的参数列表。在那些日子里,空参数列表允许调用站点上出现任意参数列表)

第二个是实现定义的,您错过了最后一个,其中您指定了参数(
argc
argv
),这些参数在程序执行时用提供的参数填充。

此“主样式”取决于您使用的编译器。 每个程序在程序退出时返回退出代码。(当程序没有错误地退出时,它是0代码),因此它是int(但在main的情况下-void表示相同;) 参数可以选择性地传递,例如: -使用命令行中的一些参数运行Program.exe,现在可以读取这些参数。

此“主样式”取决于您使用的编译器。 每个程序在程序退出时返回退出代码。(当程序没有错误地退出时,它是0代码),因此它是int(但在main的情况下-void表示相同;) 参数可以选择性地传递,例如:
-您使用命令行中的一些参数运行您的program.exe,现在可以读取这些参数。

主函数在_start中定义(在POSIX/UNIX操作系统上)。编译器查找_start符号,然后跳转到它_启动然后调用main。main之所以以如此多的方式编写,是因为对main的调用非常模糊。我将解决这些问题以及其他一些问题。
让我们从main()开始
只有在标头中定义了main并且其类型已设置时,才会发生这种情况。
现在让我们解决int main()
此时您需要返回值,以便操作系统或shell可以检测是否发生错误,例如,查看是否返回了-1,然后在返回时停止执行。
void main()用于不需要返回值的情况,通常是一个简单的程序。
int main(void)与刚才以不同格式编写的int main相同
现在让我们来讨论参数。
还有另一种编写main的方法,那就是:int main(int argc,char*argv[])

当您正在寻找要传递给函数的命令行参数时,将使用此选项。argc是参数数(包括命令),argv[]是参数。例如,如果运行./a.out,argc将为1,argv将为[0]a.out。如果运行./a.out foo argc将为2,argv将为[0]a.out,[1]foo。

主函数在_start中定义(在POSIX/UNIX操作系统上)。编译器查找_start符号,然后跳转到它_启动然后调用main。main之所以以如此多的方式编写,是因为对main的调用非常模糊。我将解决这些问题以及其他一些问题。
让我们从main()开始
只有在标头中定义了main并且其类型已设置时,才会发生这种情况。
现在让我们解决int main()
此时您需要返回值,以便操作系统或shell可以检测是否发生错误,例如,查看是否返回了-1,然后在返回时停止执行。
void main()用于不需要返回值的情况,通常是一个简单的程序。
int main(void)与刚才以不同格式编写的int main相同
现在让我们来讨论参数。
还有另一种编写main的方法,那就是:int main(int argc,char*argv[])

当您正在寻找要传递给函数的命令行参数时,将使用此选项。argc是参数数(包括命令),argv[]是参数。例如,如果运行./a.out,argc将为1,argv将为[0]a.out。如果运行./a.out foo,argc将为2,argv将为[0]a.out,[1]foo。

如果希望程序从命令行获取一些数据,则需要输入参数。例如,您可以运行smth
int main()

void main()

int main(void)

int main(int argc, char* argv[])
./test arg1 arg2