2013-11-26 21 views
7

C++ ile bir C programı (main()'un C) arayüzünü yapıyorum. Kodumdaki bazı noktalarda programın yürütülmesini durdurmak istiyorum. Şimdi bilmek isterim, bunu nasıl temizleyebilirim?Karışık C/C++ ile bir programdan çıkmak için nasıl temizlenir

Şu anda std::terminate() numaralı telefonu arayın, ancak daha iyi fikirlerin yokluğundan daha fazlası. Beni rahatsız eden ana şey bile hafızayı serbest bırakmadığımdan (çünkü program feshedildikten sonra serbest kalıyor, değil mi?) MSVS Just-in-time Debugger ortaya çıkıyor ve ben çirkin bir hata mesajı alıyorum. çalışma zamanını alışılmadık bir şekilde sonlandırır.

DÜZENLEME: Bu karışıklığa neden olduğundan: main()'dan return 0 ile döndürme bu durumda mümkün değildir.

+6

Çıkış (0) 'ile ilgili sorun nedir? –

+2

AFAIK std :: terminate olağandışı bir sona erdirmeyi belirtmek için kullanılır (örneğin yakalanmamış bir istisna en üst seviyeye ulaştığında). Bu, hata ayıklayıcısını tetikleyebilir. – wintermute

+1

Temiz yol, kontrol akışını doğru şekilde ele almak ve standart bir şekilde çıkmak (tutamaçları, nesneleri, bağlantı dişlerini vb.) Bırakmak olacaktır. '' exit (0) 'çirkin bir alternatiftir – Bruce

cevap

7

Eğer temizlik ve ardından

exit(EXIT_SUCCESS); // or EXIT_FAILURE 

destuctors çağırma hakkında endişe varsa exit, terminate ve abort arasındaki en iyi seçimdir. descructors çağırır ve otomatik depolama nesneleri (genel kapsamda bildirilen bir nesne) temizler exit

  • işlev. Ayrıca atexit'a iletilen işlevleri çağırır.

  • İşlev abort, anormal çıkışlar için kullanışlıdır ve hiçbir şeyi temizlemez. atexit'a iletilen işlevleri çağırmaz.

  • İşlevi terminate C içinde mevcut değil. Bir istisnaınız olduğunda ve programı bitiremiyorsanız bile kullanamazsınız.

+1

çıkış tüm yıkıcıları çağırmıyor – user1233963

+2

@ user1233963: [_ "statik depolama süresine sahip nesnelerin yıkıcıları, yapıcılarının tamamlanma sırasına göre tersine çevrilir veya dinamik başlatmalarının tamamlanması gerekir.] (Http://en.cppreference.com)/w/cpp/utility/program/exit) – deepmax

+1

@M M. http://ideone.com/UHg9dk – user1233963

3

main işlev böyle başlar genellikle bitmeli nerede, main fonksiyon olmasıdır. return 0; kullanırsanız, başarılı bir çıkışa işaret eder.

int main(void) { 
    //init 
    //do stuff 
    //deinit 
    return 0; // bye bye 
} 

Ayrıca exit(0); kullanabilirsiniz, ancak çıkış noktaları her yere dağılmış eğer hata ayıklamak zor şeyler yapar.

+0

Maalesef, 'main()' dönüşünü 0 yapamıyorum. Çıkışı kullanmak (0) olsa da. Her zaman programların sona ermesi için C-ish bir yol olduğunu düşündüm. – fewu

+0

@fewu "main" için dönüş türünün "int" olduğundan emin olun. – user694733

İlgili konular