引数定義
次のプロトタイプで引数を指定します。
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]** が最初のコマンド ライン引数で、以降、必ず NULL となる argv**[argc]** までの間、順に引数が続きます。 コマンド ライン処理の抑制については、コマンド ライン処理のカスタマイズに関するトピックを参照してください。最初のコマンド ライン引数は、必ず argv**[1]** となり、最後のコマンドライン引数は、argv**[argc – 1]** になります。
注意
規則により、argv[0] は、プログラムが起動されるコマンドです。 ただし、CreateProcess を使用してプロセスを生成することもできるため、1 つ目と 2 つ目の両方の引数 (lpApplicationName と lpCommandLine) を使用する場合は、argv[0] が実行可能ファイルの名前になるとは限りません。実行可能ファイルの名前とその完全修飾パスを取得するには、GetModuleFileName を使用します。
Microsoft 固有の仕様 →
- envp
多くの Unix システムに共通の拡張機能である envp 配列は、Microsoft C++ で使用されます。 これは、ユーザーの環境で設定された変数を表す文字列の配列です。 この配列は NULL エントリで終了します。 char へのポインターの配列 (char *envp[ ]) としても、char へのポインターへのポインター (char **envp) としても宣言できます。 プログラムが main ではなく wmain を使用している場合は、char の代わりに wchar_t データ型を使用します。 main および wmain に渡される環境ブロックは、現在の環境の "固定の" コピーであることに注意してください。 その後、putenv または _wputenv の呼び出しによって環境を変更すると、現在の環境 (getenv/_wgetenv および _environ 変数/_wenviron 変数で返される) は変わりますが、envp がポイントするブロックは変わりません。 環境処理の抑制については、コマンド ライン処理のカスタマイズに関するトピックを参照してください。 この引数は、C では ANSI 互換ですが、C++ では非互換です。
使用例
次の例は、main への argc、argv、および envp 引数の使用方法を示しています。
// 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";
}
}