2016-08-17 32 views
9

換句話說,可以靜態(=文件範圍的)全局正好與一個下劃線開始,且不會與C實現nameclashes的可能性?是否允許全局靜態標識符以單個_開頭?

https://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html 說:「...保留名,包括所有外部標識符(全局函數和變量)以下劃線(‘_’)開頭...」(重點煤礦)。

我注意到Linux內核啓動的功能可能不應該直接用雙下劃線調用。

我覺得這個概念很有用,我發現_(_)somethingsomething_在區分「私有」標識符時稍微容易一些,但是我明白(?)雙下劃線邀請名與C實現衝突。

是全球性的,靜態_variables_functions安全嗎?

+2

谷歌「C11草案」,然後檢查7.1.3。 C標準和POSIX可能不一定同意。 – Lundin

回答

4

帶有下劃線的標準預留前綴。
以下劃線開始和一個大寫字母或另一個 下劃線,始終保留用於任何用途的所有的標識符:


ISO/IEC 9899:201x 7.1.3保留標識符1引自)。
以下劃線開頭的所有標識符始終保留用作標識符 ,並在普通名稱空間和標籤名稱空間中均具有文件範圍。

+0

什麼是9899:201x應該是什麼意思?爲什麼不2011? – Lundin

+1

我不知道如果你指的是一些奇怪的像INCITS/ISO 9899-2012 ...這是非常相同的C11標準。在引用草稿時,您應該使用草稿名稱N1570或其他類似的草稿。無論如何,我擁有官方的ISO 2011標準,並且它與任何重要的草案都是相同的。所以即使你只有草稿,你也可以自信地參考9899:2011。 – Lundin

2

這是不安全的。根據體系結構的不同,即使對於static對象,您的代碼也可能需要一些重定位。因此,它們的名稱必須對鏈接器以及CRT符號的名稱可見。這可能會導致衝突。

相關問題