C/C++中的默认int主参数

lea*_*ner -1 c c++

我正在搞乱C/C++中的项目,我注意到了这一点:

C++

#include <iostream.h>

int main (int argc, const char * argv[]) {
    // insert code here...
    cout << "Hello, World!\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C

#include <stdio.h>

int main (int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我总是想知道这个,这些默认参数在int main下的C/C++中究竟做了什么?我知道应用程序仍然会在没有它们的情况下编译,但它们的用途是什么?

Kni*_*nug 7

它们保存在命令行上传递给程序的参数.例如,如果我有程序a.out,我就这样调用它:

$ ./a.out arg1 arg2 
Run Code Online (Sandbox Code Playgroud)

内容argv将是一个包含的字符串数组

  1. [0] "a.out"- 可执行文件的文件名始终是第一个元素
  2. [1] "arg1"- 其他论点
  3. [2] "arg2"- 我通过了

argc保存元素的数量argv(在C中,您需要另一个变量来知道数组中传递给函数时有多少元素).

您可以使用这个简单的程序自己尝试:


C++

#include <iostream>

int main(int argc, char * argv[]){
    int i;
    for(i = 0; i < argc; i++){
        std::cout << "Argument "<< i << " = " << argv[i] << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C

#include <stdio.h>

int main(int argc, char ** argv){
    int i;
    for(i = 0; i < argc; i++){
        printf("Argument %i = %s\n", i, argv[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)