2011-05-15 9 views
6

Qué función se utiliza en C++ stdlib para salir de la ejecución del programa con código de estado?Finaliza con estado

En Java, hay:

System.exit(0) 
+6

-1, una búsqueda rápida en la web te habría dado la respuesta en ningún momento a todos. o incluso si simplemente * adivinó * la respuesta. (Te daré una pista: la función se llama 'exit') – asveikau

Respuesta

10

Suponiendo que sólo tiene un hilo:

#include <iostream> 

int main() 
{ 
    std::cout << "Hello, World!\n"; 

    return(0); 
    // PROGRAM ENDS HERE. 

    std::cout << "You should not see this.\n"; 

    return(0); 
} 

Salida:

Hello, World! 

El return(0); se puede colocar en cualquier lugar que te gusta - es ll finaliza int main(), y de ahí su programa.


Alternativamente, puede llamar exit(EXIT_SUCCESS); or exit(EXIT_FAILURE); desde cualquier lugar que desee:

/* exit example */ 
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE * pFile; 
    pFile = fopen("myfile.txt", "r"); 

    if(pFile == NULL) 
    { 
     printf("Error opening file"); 
     exit (1); 
    } 
    else 
    { 
     /* file operations here */ 
    } 

    return 0; 
} 
+5

Tenga en cuenta que' return' no sale del programa a menos que la función pasa a ser 'main', mientras que' exit' dará por terminado el programa desde cualquier función en el que se llama. –

+0

He visto que en algunos sistemas (principalmente plataformas tipo Unix) que vuelven de 'main' también terminan otros hilos. No estoy seguro de lo que C++ 0x tiene que decir sobre esto, pero viendo que hasta hace muy poco los hilos no eran parte de ningún estándar de lenguaje C o C++, es posible que veas todo tipo de comportamientos. En cualquier caso, el que pregunta está muy claramente pidiendo 'salir'. – asveikau

0

Además de las otras respuestas también se puede invocar aborto, terminar, quick_exit (salidas sin llamar a los destructores, desasignar etc; por lo tanto, el nombre)

terminar las llamadas abortan de manera predeterminada, pero puede llamar a cualquier controlador de terminar de configurar.

Ejemplo de uso de aborto y set_terminate (a SE el controlador utilizado por terminar), quick_exit puede ser llamado (véase el ejemplo 2 #)

// set_terminate example 
#include <iostream>  // std::cerr 
#include <exception>  // std::set_terminate 
#include <cstdlib>  // std::abort 

void myterminate() { 
    std::cerr << "terminate handler called\n"; 
    abort(); // forces abnormal termination 
} 

int main (void) { 
    std::set_terminate (myterminate); 
    throw 0; // unhandled exception: calls terminate handler 
    return 0; 
} 

quick_exit/at_quick_exit ejemplo:

/* at_quick_exit example */ 
#include <stdio.h>  /* puts */ 
#include <stdlib.h>  /* at_quick_exit, quick_exit, EXIT_SUCCESS */ 

void fnQExit (void) 
{ 
    puts ("Quick exit function."); 
} 

int main() 
{ 
    at_quick_exit (fnQExit); 
    puts ("Main function: Beginning"); 
    quick_exit (EXIT_SUCCESS); 
    puts ("Main function: End"); // never executed 
    return 0; 
} 

I No estoy completamente seguro de por qué uno llamaría a quick_exit pero existe y, por lo tanto, debería proporcionar documentación para ello (cortesía de http://www.cplusplus.com/reference)

Addi En principio, se puede llamar a at_exit como el equivalente de at_quick_exit.

Es cierto que no estoy tan familiarizado con set_terminate y termino ya que no los llamo yo mismo, pero supongo que podrías usar quick_exit como un manejador de terminación si lo deseas; o uno personalizado (pero por favor no me cites sobre eso).

-1

En C++, puede utilizar la salida (0) por ejemplo:

switch(option){ 
     case 1: 
     //statement 
     break; 
     case 2: 
     //statement 
     exit(0); 
Cuestiones relacionadas