Sun Studio 12:C 用户指南

6.8.2 保留供实现使用的名称

标准进一步限制与其库相关的实现。以前,大多数程序员认为不应该在 UNIX 系统上对他们自己的函数使用 readwrite 等名称。ISO C 要求实现中的引用仅引入该标准保留的名称。

因此,该标准保留所有可能名称的子集供实现使用。此类名称由标识符组成,标识符以下划线开头,后面是其他下划线或大写字母。此类名称包含与以下常规表达式匹配的所有名称:


_[_A-Z][0-9_a-zA-Z]*

严格地说,如果程序使用此标识符,其行为不确定。因此,使用 _POSIX_SOURCE(或 _XOPEN_SOURCE)的程序具有不确定的行为。

但是,不确定的行为具有不同的程度。如果在符合 POSIX 标准的实现中使用 _POSIX_SOURCE,则您知道程序的不确定行为包括某些头文件中的某些附加名称,并且该程序仍符合公认的标准。ISO C 标准中的预留漏洞允许实现符合表面上不兼容的规范。另一方面,当遇到 _POSIX_SOURCE 等名称时,不符合 POSIX 标准的实现按任意方式执行。

该标准还保留以下划线开头的所有其他名称,以用于作为常规文件作用域标识符以及作为结构和联合的标记的头文件,但不用于局部作用域。允许以下公共实践:让命名为 _filbuf_doprnt 的函数实现库的隐藏部分。