2012-01-10 2 views
2

Я хочу убить свою программу на C++ и немедленно завершить работу без активации деструкторов любого типа, особенно статических и глобальных переменных, но я хочу выйти со статусом 0 - abort() не будет работать для меня.как прервать программу C++ и выйти со статусом 0?

У кого-нибудь есть решение? Thanks

+0

Почему 'прервать()' не работать для вас, если я могу спросить? –

+0

Почему вы не хотите активировать деструкторы? –

+0

«Функция генерирует сигнал SIGABRT, который по умолчанию заставляет программу прекратить возвращать неудачный код ошибки завершения в среду хоста». – WeaselFox

ответ

8

Возможно, что _exit(0); - это то, что вы ищете?

Это man page, чтобы прочитать об этом.

+0

, который активировал бы деструкторов, не так ли? – WeaselFox

+0

попробовал, работает, спасибо! – WeaselFox

+0

В C++ 11 это стандартизован как 'std :: _ Exit' (унаследованный от C99) или' std :: quick_exit'. –

1

Как насчет _Exit(0) от stdlib.h. (Номер: http://ideone.com/ecCgC)

+0

Это все равно вызовет деструкторы глобальных и статических объектов. – bitmask

+0

@bitmask: Нет. Проверьте N3290 §18.5/3. – kennytm

+1

@bitmask: Не в C++ 11 это не будет. В C++ 03 его не указано, но, вероятно, пока не будет. –

6

От C++ 11 n3290 - § 18,5:

[[noreturn]] void _Exit(int status) noexcept; 

Программа завершается без выполнения деструкторов для объектов автоматической, нитки, или статическая продолжительность хранения и без вызова функций, передаваемых atexit ()

Это фактически определено на C99, хотя на практике оно работает с большим количеством пре-C++ 11-реализаций.

Использование:

#include <cstdlib> 
#include <iostream> 

struct test { 
    ~test() { 
    std::cout << "Goodbye world" << std::endl; 
    } 
}; 

int main() { 
    test t; 
    _Exit(0); 
} 
+0

Я думаю, что это было бы более полезно, если бы вы уточнили, какие версии C++ это будут и не будут работать. –

+1

@ Styne666: n3290 означает C++ 11. Но функция является частью C99. И это, вероятно, будет работать еще до этого. – kennytm

 Смежные вопросы

  • Нет связанных вопросов^_^