1. 程式人生 > >Linux程式設計中的坑——C++中exit和return的區別

Linux程式設計中的坑——C++中exit和return的區別

今天遇到一個坑,折騰了一天才把這個坑填上,情況是這樣的:

寫了段程式碼,在main()函式中建立一個分離執行緒,結果這個執行緒什麼都沒幹就直接掛掉了,程式碼長這樣:

int main()
{
   建立一個分離執行緒();
   return 0;
}

後來研(bai)究(du)了一下,原來在main()函式中寫return,會被編譯器優化成,也會像exit一樣直接殺死程序,所以分離出來的執行緒什麼都沒幹,就隨著程序一起掛掉了。

所以多執行緒程式設計中,main()函式想退出執行緒應當使用

pthread_exit(NULL);

補一下exit和return的區別:exit為直接殺死/退出當前程序,return則為退出當前函式,但是在g++編譯器中,main中的return會被自動優化成exit。。。
其實從原理來講區別應該很大的,這裡就先挖個坑寫上這些,改天再來填。。。→_→

還有個比較明顯的區別:return會呼叫區域性物件的解構函式,而exit不會(不管是否main()函式,這個區別都是存在的)得意