2017-06-15 77 views
2

的#pragma啓動的#pragma退出的:這些指令可以幫助我們來指定需要的程序運行之前 啓動功能(控制越過前到main())和程序 退出之前(就在控制從main()返回之前)。用例的#pragma開始和#pragma退出

任何人都可以向我推薦這些預處理器指令的任何用例嗎?

恐怕這些在面向對象編程中的用例可能非常有限。有沒有人發現它在項目中使用?

+1

我同意。你也可以創建一個對象的靜態實例。在從main返回之後,構造函數在進入main和析構函數之前也會被調用。 –

+1

我已經看到(C和彙編程序)代碼在main(並且實際上在/之前/而不是crt)之前執行,當它執行不能等待crt(有時冗長)活動的事情時。然而,「有龍」。 – Yunnosch

+0

這似乎取自Karthik Byggari的博客。我會無視他的;他仍然在談論20世紀的「Turbo C」編譯器這一事實表明了今天的相關性。 – MSalters

回答

2

關於這些指令最重要的部分是能夠爲在main之前/之後調用的函數指定優先級。這很方便克服"static initialization order fiasco"。 對第二個問題的回答:不,我沒有看到這些指令在實際應用程序中使用。

+0

'#pragma start'指令*會真的解決這個問題嗎?看起來好像它只是將罐子放在街上。此外,在我初始化全局靜態之前,'#pragma start'實際上運行代碼*似乎令人懷疑。但是我找不到任何支持這些的編譯器,所以我找不到任何關於它們的文檔。 –

0

爲了避免在註釋給予(即使是部分)的答案,我有助於這個觀點:

我看到(C和彙編)在實時系統中的代碼,前主(和實際前正在執行/而不是crt),當它做的事情不能等待crt的(有時是冗長的)活動。然而,「有龍」。

0

恕我直言,這是編碼準則之一,應該指示這種決定。如果您可以使用特定編譯器提供的這些擴展名,那麼您就可以開始使用。但是,如果重點是編寫標準代碼,那麼應該使用標準功能。

Implementation defined behavior control,來自CPP參考,是尋找標準支持的良好開端。

從C++的角度來看,預處理器的使用根本不被認爲是一種好的做法(儘管在某些情況下它是不可避免的)。它的使用保持最小。儘管如此,一些項目使用它,這是他們的決定。

從個人經驗來看,我從未在任何項目中使用/看過任何這些pragma