[英]Does return 0 by int main() in C/C++, on any OS, clears off all the resources used by the program in any(RAM, cache or any…) memory?
我屬於一所新設立的大學,並且擁有不那么有才華的老師。 我個人已經發現他們犯了很多次錯誤。 這是因為他們自己有錯誤的知識。 因此,我教自己編程和網絡。 因為我不能依賴它們。
現在,由於這是一個場景,我已經陷入了一個大疑問。
我的一個主題是算法分析,曾說過,“當int main()返回0時,所有緩沖區都被關閉,所有使用的資源都被清除,並且為其他程序創建了空間。因此它是一個好的練習返回0“。 我認為,“媽媽,我們總是知道這只是表明該計划已經成功完成了”,她說,“你是部分正確的”。
這顯然意味着她意味着返回非零不釋放資源。
現在誰是對的,我或她? 我應該要錢嗎?
main返回的值將提供給操作系統。 C或C ++標准中沒有任何內容表明基於該值發生了不同的事情。
當main
函數返回打開文件時,將關閉並刷新輸出流。 C不指定是否釋放malloc
分配的malloc
。
我們可以從兩個層面思考這個問題。
對於1),C / C ++不進行任何資源管理,它只是將返回代碼提供給OS,而不管0或不同的值。
我能想到的一個例外是復雜的庫資源(例如流),它們可以在超出范圍時被破壞......並且可以具有與之關聯的資源清理行為(例如,包含在ofstream中的filebuf將在析構函數中關閉文件) )
但以上情況將視具體情況而定。
對於2)......簡單的答案只取決於操作系統。 典型的主流操作系統將在程序之后處理資源清理。 邊緣操作系統(例如嵌入式系統)可能不會....甚至在maintream操作系統的情況下,不同的資源將得到不同的處理或需要更多的時間來恢復(找到: 操作系統;資源自動清理(對於Windows)和答案到什么時候C ++終止處理程序是Right Thing(TM)? )
最后操作系統對返回值的作用再次取決於操作系統,我懷疑資源處理會隨着不同的返回值而改變......但誰知道特定情況。
從上面的答案得出的最終結論......操作系統完成了它的編程工作。 返回任何整數只意味着程序已終止的操作系統,沒有別的。 如果OS成功終止或失敗,操作系統並不在意。 當我們從main()返回任何整數時,整數只是操作系統的垃圾。 無論你返回0或-556還是任何整數。 操作系統的一切都是一樣的。 操作系統不清除任何資源。 事實上,當涉及到C / C ++時,程序員有責任清除資源。 操作系統什么都不做。 我們返回0只是因為它是一個標准的對流。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.