int main();
Esta é uma declaração simples. Não pode aceitar nenhum argumento de linha de comando.
int main(int argc, char* argv[]);
Esta declaração é usada quando seu programa deve receber argumentos de linha de comando. Quando executado assim:
myprogram arg1 arg2 arg3
argc, ou Contagem de argumentos, será definido como 4 (quatro argumentos) e argv, ou Vetores de argumentos, serão preenchidos com ponteiros de seqüência de caracteres para "meuprograma", "arg1", "arg2" e "arg3". A chamada do programa ( myprogram) está incluída nos argumentos!
Como alternativa, você pode usar:
int main(int argc, char** argv);
Isso também é válido.
Há outro parâmetro que você pode adicionar:
int main (int argc, char *argv[], char *envp[])
O envpparâmetro também contém variáveis de ambiente. Cada entrada segue este formato:
VARIABLENAME=VariableValue
como isso:
SHELL=/bin/bash
A lista de variáveis de ambiente é terminada por nulo.
IMPORTANTE: NÃO use qualquer argvou envpvalores diretamente em chamadas para system()! Essa é uma enorme falha de segurança, pois usuários mal-intencionados podem definir variáveis de ambiente para comandos da linha de comando e (potencialmente) causar danos enormes. Em geral, apenas não use system(). Quase sempre há uma solução melhor implementada através das bibliotecas C.