2011-05-15 3 views
6

Какая функция используется в C++ stdlib для выхода из выполнения программы с кодом состояния?Выйти C++-программа со статусом

В Java есть:

System.exit(0) 
+6

-1, быстрый поиск веб дал бы вам ответ в кратчайшие сроки на всех. или даже если вы просто * угадали * ответ. (Я дам вам подсказку: функция называется 'exit') – asveikau

ответ

10

Если у вас есть только один поток:

#include <iostream> 

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

    return(0); 
    // PROGRAM ENDS HERE. 

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

    return(0); 
} 

Выход:

Hello, World! 

return(0); могут быть размещены где угодно - это» ll end int main(), и, следовательно, ваша программа.


В качестве альтернативы, вы можете позвонить exit(EXIT_SUCCESS); or exit(EXIT_FAILURE); из где угодно:

/* 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

Обратите внимание, что' return' не выходит из программы, если функция не является 'main', тогда как' exit' завершает программу из любой функции в котором он называется. –

+0

Я видел, что на некоторых системах (в основном Unix-подобных платформах) возврат из 'main' также завершает другие потоки. Я не уверен, что C++ 0x должен сказать об этом, но, увидев, что до недавнего времени потоки не были частью любого языка C или C++, вы могли видеть все виды поведения. Во всяком случае, вопросник очень четко просит «выход». – asveikau

0

В дополнение к другим ответам вы также можете вызвать прерывание, прекратить quick_exit (выход без вызова деструкторов, deallocating и т.д., следовательно, имя)

прекратить отмену вызовов по умолчанию, но может вызвать любой обработчик завершения, который вы установили.

Пример использования прерывания и set_terminate (к себе обработчик, используемый прекратить), quick_exit можно назвать (смотри пример 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 пример:

/* 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 «Не совсем понятно, почему можно было бы назвать quick_exit, но он существует, и поэтому я должен предоставить ему документацию (любезно предоставлено http://www.cplusplus.com/reference)

Addi можно вызвать at_exit как эквивалент at_quick_exit.

По общему признанию, я не так хорошо знаком с set_terminate и прекращаю, поскольку сам не называю их, но я бы предположил, что вы могли бы использовать quick_exit в качестве обработчика завершения, если хотите; или пользовательский (но, пожалуйста, не цитируйте меня на этом).

-1

В C++ можно использовать выход (0) , например:

switch(option){ 
     case 1: 
     //statement 
     break; 
     case 2: 
     //statement 
     exit(0); 
Смежные вопросы