Definições de argumento
Os argumentos do protótipo
int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
int wmain( int argc[ , wchar_t *argv[ ] [, wchar_t *envp[ ] ] ] );
permitem uma análise conveniente dos argumentos na linha de comando e, opcionalmente, acesso a variáveis de ambiente. As definições dos argumentos são as seguintes:
argc
Um inteiro que contém a contagem dos argumentos que se seguem em argv. O parâmetro argc é sempre maior ou igual a 1.argv
Uma matriz de cadeias de caracteres terminadas em nulo que representam argumentos de linha de comando inseridos pelo usuário do programa. Por convenção, argv**[0]** é o comando com que o programa é invocado, argv**[1]** é o primeiro argumento de linha de comando, e assim por diante, até argv**[argc]**, que é sempre NULL. Consulte Personalizando o processamento de linha de comando para obter informações sobre como suprimir o processamento de linha de comando.O primeiro argumento de linha de comando é sempre argv**[1]** e o último é argv**[argc – 1]**.
Dica
Por convenção, argv[0] é o comando com que o programa é invocado. No entanto, é possível gerar um processo usando CreateProcess. Se você usar o primeiro e o segundo argumentos (lpApplicationName e lpCommandLine), argv[0] não poderá ser o nome do executável; use GetModuleFileName para recuperar o nome do executável e o respectivo caminho totalmente qualificado.
Específico da Microsoft
- envp
A matriz envp, uma extensão comum em muitos sistemas UNIX, é usada no Microsoft C++. Trata-se de uma matriz de cadeias de caracteres que representam as variáveis definidas no ambiente do usuário. Essa matriz é terminada por uma entrada NULL. Ela pode ser declarada como uma matriz de ponteiros para char (char *envp[ ]) ou como um ponteiro para ponteiros para char (char **envp**). Se o seu programa usa wmain em vez de main, use o tipo de dados wchar_t em vez de char. O bloco de ambiente passado para main e wmain é uma cópia "congelada" do ambiente atual. Caso, subsequentemente, você altere o ambiente por meio de uma chamada para putenv ou _wputenv, o ambiente atual (conforme retornado por getenv/_wgetenv** e a variável _environ/ _wenviron) será alterado, mas o bloco para o qual envp aponta não será alterado. Consulte Personalizando o processamento de linha de comando para obter informações sobre como suprimir o processamento do ambiente. Esse argumento é compatível com ANSI em C, mas não em C++.
Exemplo
O exemplo a seguir mostra como usar os argumentos argc, argv e envp de 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";
}
}