参数定义

原型中的参数

int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] ); 
int wmain( int argc[ , wchar_t *argv[ ] [, wchar_t *envp[ ] ] ] );

允许通过命令行分析参数并(可选)允许访问环境变量。 参数定义如下所示:

  • argc
    包含 argv 后面的参数计数的整数。 argc 参数始终大于或等于 1。

  • argv
    表示由杂注用户输入的命令行参数的以 null 结尾的字符串的数组。 按照约定,argv**[0]** 是用于调用程序的命令,argv**[1]** 是第一个命令行参数,依此类推,直到 argv**[]**argc,它始终为 NULL。 有关取消命令行处理的信息,请参阅自定义命令行处理

    第一个命令行参数始终是 argv**[1],且最后一个命令行参数是 argv[argc – 1]**。

    备注

    按照约定,argv[0] 是用于调用程序的命令。但是,可以使用 CreateProcess 来生成进程,并且如果您使用第一个参数和第二个参数(lpApplicationName 和 lpCommandLine),则 argv[0] 可能不是可执行文件的名称;使用 GetModuleFileName 检索可执行文件名称及其完全限定路径。

Microsoft 专用

  • envp
    在 Microsoft C++ 中使用 envp 数组(它是许多 UNIX 系统中的常见扩展)。 它是表示用户环境中的变量集的字符串的数组。 该数组由 NULL 项终止。 它可以声明为指向 char (char *envp[ ]) 的指针的数组或一个指向 char (char **envp**)** 的指针的指针。 如果程序使用 wmain 而不是 main,请使用 wchar_t 数据类型而不是 char。 传递给 mainwmain 的环境块是当前环境的“冻结”副本。 如果您随后通过调用 putenv_wputenv 更改环境,则当前环境(由 getenv/_wgetenv_environ/ _wenviron 变量返回)将发生更改,但由 envp 指向的块将不会更改。 有关取消环境处理的信息,请参阅自定义命令行处理。 此参数在 C 中是 ANSI 兼容的,但在 C++ 中不是这样。

示例

下面的示例演示如何将 argc、argv 和 envp 参数用于 main

// argument_definitions.cpp
// compile with: /EHsc
#include <iostream>
#include <string.h>

using namespace std;
int main( int argc, char *argv[], char *envp[] ) {
    int iNumberLines = 0;    // Default is no line numbers.

    // If /n is passed to the .exe, display numbered listing
    // of environment variables.

    if ( (argc == 2) && _stricmp( argv[1], "/n" ) == 0 )
         iNumberLines = 1;

    // Walk through list of strings until a NULL is encountered.
    for( int i = 0; envp[i] != NULL; ++i ) {
        if( iNumberLines )
            cout << i << ": " << envp[i] << "\n";
    }
}

请参见

参考

main:程序启动