我正在學習gcc的cleanup attribute,並學習如何調用函數以在變量超出範圍時運行,我不明白你爲什麼可以使用「cleanup」這個詞有或沒有下劃線。 和下劃線的文檔或文檔在哪裏?gcc預編譯器指令__attribute__((__cleanup__))vs((cleanup))(with vs without underscores?)
上述GCC的文檔顯示它是這樣的:
__attribute__ ((cleanup(cleanup_function)))
然而,大多數代碼示例我讀,顯示它是這樣的:
__attribute__ ((__cleanup__(cleanup_function)))
例:
- http://echorand.me/site/notes/articles/c_cleanup/cleanup_attribute_c.html
- http://www.nongnu.org/avr-libc/user-manual/atomic_8h_source.html
請注意,第一個示例鏈接狀態它們是相同的,當然編碼它證明了這一點,但他是如何知道這最初?這個是從哪裏來的?
爲什麼區別? __cleanup__
在哪裏定義或記錄,而不是cleanup
?
我的根本問題在於,我不知道是什麼我不知道的事實,因此我想揭露一些我未知的未知的,使他們成爲已知的未知,直到我可以學習他們,使他們知道知道。
我的想法是,也許有一些全球適用的原則gcc預處理器指令,您可以在任何一個之前或之後任意添加下劃線? - 或者也許只有其中一些? - 或者它可能以某種方式修改預處理器指令或屬性,並且有些情況下一個方法(有或沒有額外的下劃線)比另一個方法更受歡迎?
您提供的第一個鏈接提示(如果不是徹底的狀態)「清理」和「__cleanup__」是相同的。此外,鑑於您已將此標籤標記爲C++,我還要提到它的最佳目的是在C樣式代碼中使用RAII語義。一般來說,在C++中,你應該把需要清理的東西包裝到一個具有析構函數的類中(並且通過C++ 11或更新版本的三條規則或五條規則 - 你也需要構造函數和/或移動操作員)。 – inetknght
謝謝。我多說了一下我的問題。第一個鏈接確實說明它們是相同的,但是我想知道這對於我使用的其他屬性意味着什麼....是否始終存在同一事物的多個選項?這個人怎麼知道他們是一樣的?當然,必須存在一些差異的原因。查看我更新的答案,瞭解我的一些驚喜。 –