2010-06-13 35 views

回答

2

重入是ISO C和C++可以通過設計進行的功能,因此包括GCC。編碼重入函數仍然是您的責任。

即使一個函數被正確編碼重入也不會生成可重入代碼的AC編譯器將是例外而不是規則,並且會由於架構約束(例如沒有足夠的資源來支持堆棧,因此生成靜態幀)。在這些情況下,編譯器文檔應該說明這一點。

有些文章你可能是:

4

不,您必須編寫可重入代碼。

+0

但是,是否有任何生成可重入代碼的gcc變體? – 2010-06-13 10:55:10

0

不,GCC不能保證你編寫的重入代碼。

但是,在主要平臺上,編譯器生成或包含代碼(如數學內在函數或函數調用)是可重入的。由於GCC不支持那些不可重入函數調用很常見的平臺,比如8051,編譯器與重入問題幾乎沒有風險。

有GCC端口有錯誤和問題,如MSP430版本。

+0

您的意思是說,有GCC工具鏈支持各種平臺的可重入代碼,但有一些問題? – 2010-06-13 09:10:08

1

重新編入並不是編譯器可以控制的任何東西 - 編程人員可以編寫重新編寫的代碼。要做到這一點,你需要避免所有明顯的缺陷,例如全局變量(包括本地靜態變量),共享資源,線程,對其他不可重入函數的調用等。 8051,默認情況下可能不會生成可重入代碼,您可能需要通過例如請求重入特定功能的代碼。一個#pragma

+0

這個查詢是由於我遇到的一個信息,這個信息是爲了開發與uC/OS-II RTOS相關的應用程序而開發的,需要有一個生成可重入代碼的C編譯器。 – 2010-06-13 14:44:45

1

GCC至少它的大多數編譯爲(平臺,特別是如果你避免傳遞或返回結構產生可重入代碼按價值計算),但有可能某種特定語言或平臺ABI可能會另行規定。你需要更具體地說明任何更具說服力的聲明;我知道,如果正在編譯的代碼本身基本上是可重入的(當然奇怪的全局狀態技巧會讓你在任何平臺上遇到麻煩),它肯定在桌面處理器上是可重入的。

+0

確切地說,我完全沒有使用gcc編譯x86,arm和sparc上的可重入代碼的問題。 – 2010-06-13 17:31:45