FrEqDe Asked: 2020-03-14 18:31:37 +0800 CST 2020-03-14 18:31:37 +0800 CST 2020-03-14 18:31:37 +0800 CST c++中带参数的main和不带参数的main有什么区别? 772 有一个主要是这样的。 int main(int argc, char *argv[]){ } 还有一个是这样的: int main(){ } 到目前为止,我都使用了这两种方法,并且两者都对我有用,所以我还没有确定使用其中一种有什么区别,或者它们是否有不同的目的。 c++ 3 Answers Voted Best Answer Angel Angel 2020-03-14T18:57:34+08:002020-03-14T18:57:34+08:00 在第一main argc:存储参数的数量(数量),包括可执行文件的名称。 *argv[]:包含所有接收到的参数的数组1包括可执行文件的名称。 如果您多次使用终端,您会执行以下操作: miPrograma argumento1 argumento2 那是通过第一个main但不是第二个时,您可以获取这些参数并在程序中使用它们来生成一个或另一个行为,检查传递了什么参数,或者执行程序时传递的参数数量等。 你可以编译这个例子: int main(int argc, char *argv[]) { printf("numero de argumentos: %i\n", argc); printf("Argumento 0: %s\n", argv[0]); printf("Argumento 1: %s\n", argv[1]); printf("Argumento 2: %s\n", argv[2]); printf("Argumento 3: %s\n", argv[3]); return 0; } 并像这样运行它,例如: a.out stack overflow es 壳: ./a.out stack overflow es numero de argumentos: 4 Argumento 0: ./a.out Argumento 1: stack Argumento 2: overflow Argumento 3: es (如果你的程序叫做 a.out) 以下代码使用此语法char **argv而不是char *argv[]但“基本”相同。一个比c多,另一个是c++,有人称它为二维字符数组,而另一些人称它为字符指针数组。 #include <stdio.h> int main(int argc, char **argv) { printf("Argumento 0: %s\n", argv[0]); printf("Argumento 1: %s\n", argv[1]); printf("Argumento 2: %s\n", argv[2]); printf("Argumento 3: %s\n", argv[3]); return 0; } 1 *argv[]:指向字符的指针数组。 PaperBirdMaster 2020-03-15T01:25:26+08:002020-03-15T01:25:26+08:00 c++中带参数的main和不带参数的main有什么区别? 问题本身就有答案:论据。这两个版本都将被视为程序的入口点。 根据C++ 标准(我的翻译): 3.6.1 主要功能 该程序必须包含一个名为 的全局函数main,这将是程序的起点。[...] 实现不得预定义函数main。此函数不应重载。必须用返回值声明int[...] 实现必须允许两个签名 2.1。-()返回inty的函数 2.2. - 指向返回指针的函数(int,指针char)int 喜欢的类型main。 因此,这两个签名都是正确且有效的,main并且标准并未表明任一版本的main行为应有所不同。 rnrneverdies 2020-03-14T19:29:08+08:002020-03-14T19:29:08+08:00 这两种表格都是有效的,并且是您申请的入口点。 第一种形式int main(int argc, char** argv)接收命令行参数(当应用程序启动时),形式为:以空字符结尾的字符串数组 (argv) 和该数组中的字符串数 (argc)。 第二种方法int main()更简单,当应用程序不需要读取命令行参数(即,不使用它们)时首选。 虽然你没有提到它,但main如果执行成功,它应该返回 0,如果失败,它应该返回非 0。如果省略return,c++ 假定您返回 0(或成功)。
在第一
main
argc:存储参数的数量(数量),包括可执行文件的名称。
*argv[]:包含所有接收到的参数的数组1包括可执行文件的名称。
如果您多次使用终端,您会执行以下操作:
那是通过第一个
main
但不是第二个时,您可以获取这些参数并在程序中使用它们来生成一个或另一个行为,检查传递了什么参数,或者执行程序时传递的参数数量等。你可以编译这个例子:
并像这样运行它,例如:
壳:
(如果你的程序叫做 a.out)
以下代码使用此语法
char **argv
而不是char *argv[]
但“基本”相同。一个比c多,另一个是c++,有人称它为二维字符数组,而另一些人称它为字符指针数组。1 *argv[]:指向字符的指针数组。
问题本身就有答案:论据。这两个版本都将被视为程序的入口点。
根据C++ 标准(我的翻译):
因此,这两个签名都是正确且有效的,
main
并且标准并未表明任一版本的main
行为应有所不同。这两种表格都是有效的,并且是您申请的入口点。
第一种形式
int main(int argc, char** argv)
接收命令行参数(当应用程序启动时),形式为:以空字符结尾的字符串数组 (argv) 和该数组中的字符串数 (argc)。第二种方法
int main()
更简单,当应用程序不需要读取命令行参数(即,不使用它们)时首选。虽然你没有提到它,但
main
如果执行成功,它应该返回 0,如果失败,它应该返回非 0。如果省略return
,c++ 假定您返回 0(或成功)。