Определения аргументов
Аргументы в прототипе
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
Массив envp, представляющий собой общее расширение во многих системах UNIX, используется в Microsoft C++. Это массив строк, представляющих переменные, заданные в среде пользователя. Этот массив завершен записью NULL. Его можно объявить как массив указателей на char (char *envp[ ]) или как указатель на указатели на char (char **envp**). Если программа использует wmain вместо main, следует использовать тип данных wchar_t вместо char. Блок среды, передаваемый в main и wmain, является "зафиксированной" копией текущей среды. Если впоследствии среда будет изменена путем вызова putenv или _wputenv, изменится только текущая среда (возвращенная getenv/_wgetenv** и переменной _environ или _wenviron); блок, на который указывает envp, останется неизменным. См. сведения о подавлении обработки в среде в разделе Настройка обработки командной строки. Этот аргумент совместим с ANSI в C, но не в 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";
}
}