2016-08-17 48 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符号的名称可见。这可能会导致冲突。

相关问题