簡體   English   中英

如何實現exit()函數的模擬? -std = C99

[英]How to implement analogue of exit() functions? -std=c99

我正在寫一個大學項目。 用標准C99寫。 其中一個要求是缺少exit(); 功能。 是否可以實現類似的功能? 我試圖創建一個使用減號argc調用main的函數來檢測退出。 這是一個愚蠢的嘗試,因為第一個主要繼續。

只是對項目的描述指定了exit()使用exit來減少分數。我明白它要求我通過指針運行代碼並在函數的返回值中返回一個錯誤。 我對這種做法更感興趣。 只為我自己。

認為你誤解了這個要求:他們可能會說do not use exit() 這並不意味着你應該實現自己的exit() ,恰恰相反:它們可能意味着你的程序的唯一出口點應該是你的main函數的結尾(或者是main中的return語句)功能)被認為是良好的編程風格。

exit()是一個系統級工具,你無法在不知道操作系統如何實現它(Linux?Windows?embedded system?)的情況下自行實現。 正如丹尼爾菲舍爾所提到的,你可以調用abort() ,這將基本上做退出將做的事情並退出程序。

還有其他“黑客”讓您的程序在沒有顯式調用exit()情況下中止,但這些只是黑客攻擊,不應該在生產代碼中使用。

  1. 使用C鏈接創建C ++函數並拋出異常

    extern“C”MyExit(){throw std :: exception(); }

  2. 用SIGKILL調用signal()

  3. 呼叫abort()

  4. 編寫一些匯編代碼來展開調用堆棧,直到它到達調用main的函數並將返回值插入到正確的返回寄存器中並從那里開始。 我不認為你可以在純C中做到這一點,因為ABI不能直接訪問。 但至少這只是不涉及操作系統的方法(只是ABI)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM