2010-03-26 21 views
7

¿Qué números de argumentos se utilizan para main? ¿Qué variantes de la definición main es posible?¿Cuántos argumentos tiene main() en C/C++

+0

Justo ahí en los enlaces "Relacionados": http://stackoverflow.com/questions/1621574/mains-signature-in-c Además, etiquetar es inconsistente con su título. – dmckee

+0

añadido etiqueta 'C++' para coherencia con el título – jschmier

Respuesta

22

C++ estándar: (Source)

El C++ 98 estándar dice en el apartado 3.6.1.2

Deberá tener un tipo de retorno de tipo int , pero por lo demás su tipo es implementación definida. Todos implementaciones deberán permitir que tanto los siguientes definiciones de principal: int main() y int main (int argc, char * argv [])

Comúnmente hay 3 conjuntos de parámetros:

  • no hay parámetros/void
  • int argc, char ** argv
  • int argc, char ** argv, char ** env

Dónde argc es el número de líneas de comando, argv son las líneas de comandos reales, y env son las variables de entorno.

de Windows:

Para una aplicación de Windows que tiene un punto de entrada de WinMain con una firma diferente en lugar de principal.

int WINAPI WinMain(
    __in HINSTANCE hInstance, 
    __in HINSTANCE hPrevInstance, 
    __in LPSTR lpCmdLine, 
    __in int nCmdShow 
); 

OS X: (Source)

Mac OS X y Darwin tiene un cuarto parámetro que contiene información OS-suministrado arbitraria, tal como la ruta al binario ejecución:

int main(int argc, char **argv, char **envp, char **apple) 
+0

y ¿qué pasa con auxv en Linux? – osgx

+1

@osgx: No estoy seguro si otros son posibles, pero los 3 mencionados comúnmente son compatibles con g ++ –

+0

Nunca he entendido el requisito de 'main' return' int'. 'main' es la única función explícitamente permitida para tener un valor de retorno implícito. ¿Por qué salir de su camino para permitir que 'main' pretenda ser' void', en lugar de simplemente dejar que sea 'nulo' para empezar? –