是否必须编写int main(int argc,char*argv []),不能使用其他名称而不是argc和*argv []?

qua*_*231 4 c command-line-arguments visual-c++

我在这里遇到一些麻烦,在项目选项本身中给Visual Studio提供命令行参数(在'Configuration Properties' - >'Debugging'中).

int main(int argc)在" int main(int main_i)"没有用之后写了这个" " .在MS visual studio属性页面的项目命令行参数中,我不确定应该写什么.我只想传递一个整数来指定文件是读取还是写入,因此只需要int argc.我不需要这个字符*argv[].我在命令行参数文本框中尝试了一些值,但它在执行时没有到达exe文件,它显示了我根本没有输入的内容.

你能给我一个简单的例子来说明我需要在MSVS C++ Property Pages的命令行参数空间输入什么吗?我根本找不到任何关于如何将命令行参数提供给MSVS的示例.

我也不明白为什么我需要重建整个项目,即使我刚刚修改了命令行参数值?

Gre*_*ill 9

如果希望程序理解单个整数命令行参数,则仍然必须使用argcargv.像这样的东西应该这样做:

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

    if (argc < 2) {
        fprintf(stderr, "Need a command line argument.\n");
        exit(1);
    }

    int arg = atoi(argv[1]);
    // now you have an integer
    // do whatever with it...
}
Run Code Online (Sandbox Code Playgroud)

C标准要求该main函数具有特定的参数集.其中一个允许的组合是(int, char *[]).您可以命名任何你想要的参数,但他们几乎总是叫argcargv.


Lev*_*von 5

这些名称只是一个完善的约定,你可以使用你想要的任何名称(虽然它可能引起一些人的注意),但是,我只看到了以指定的顺序使用了两个参数的代码.

在ANSI之前的日子里,它可以简单地拥有int main(),它仍然是......但是这些天argc argv通常都是供应的.

您不能只提供其中一个参数.


Sup*_*man 5

变量名仅适用于编译器。它们将被转换为二进制图像中的地址。您最多可以为 main 传递 3 个参数。

这是我尝试过的-

int main(int i, char* a[], char* e[])
Run Code Online (Sandbox Code Playgroud)

如您所见,这些名称不是普通名称。第一个参数是命令行参数的数量,第二个是实际的参数数组,第三个是环境变量数组。

实际上,main 可以接受任意数量的参数,但其余的,在第三个之后将无效。这仍然会编译 -

int main(int i, char* a[], char* e[], char* j[])
Run Code Online (Sandbox Code Playgroud)

只是为了好玩,你甚至可以这样做 -

int main(int i, float a, float b, float c, float d, float e)
Run Code Online (Sandbox Code Playgroud)