没有任何类型,因为您提到的类型可能是多年来从跨标准(例如 POSIX)和不同的主要实现中积累起来的。一个例子是xstr
,assert
两者都是小写的宏。但是,请确保您已阅读C-FAQ 12.9,您应该一切顺利。
您可能还想查看标准中有关保留标识符的部分。这是我的 N1570 副本所说的:
7.1.3 保留标识符
1 每个标头声明或定义其相关子条款中列出的所有标识符,并可选地声明或定义其相关未来库方向子条款中列出的标识符和标识符,这些标识符始终保留用于任何用途或用作文件范围标识符。— 以下划线和大写字母或另一个下划线开头的所有标识符始终保留用于任何用途。— 所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符。
— 如果包含任何相关的标题,则保留以下任何子条款(包括未来的库方向)中的每个宏名称以供指定使用;除非另有明确说明(见 7.1.4)。
— 以下任何子条款(包括未来的库方向)和 errno 中的所有具有外部链接的标识符始终保留用作具有外部链接的标识符。184)
— 在以下任何子条款(包括未来的库方向)中列出的每个具有文件范围的标识符都保留用作宏名称和在同一名称空间中作为具有文件范围的标识符,如果包括其任何关联的头文件。
2 没有保留其他标识符。如果程序在保留标识符的上下文中声明或定义标识符(7.1.4 允许的除外),或将保留标识符定义为宏名称,则行为未定义。
3 如果程序删除(使用#undef)上面列出的第一组标识符的任何宏定义,则行为未定义。