预处理器保留了哪些#define标识符?

Chr*_*son 1 c c-preprocessor

我以为我曾经读过一个#define价值的领先下划线;

#define _FOO
Run Code Online (Sandbox Code Playgroud)

被ANSI C或其他标准劝阻或禁止.今天我已经梳理了互联网,审查了K&R和CRM,找不到任何支持.我发现的最接近的是一个建议(没有合适的引用),预定义标识符始终以双下划线开头结尾,以便上述内容不会发生冲突.我问,因为我正在使用一个新的静态检查器,抱怨:

#ifndef __FOO_H
#define __FOO_H
...
#endif // __FOO_H
Run Code Online (Sandbox Code Playgroud)

#define行,我是否正确或检查是我无法找到一个权威的答案.

oua*_*uah 7

今天我已经梳理了互联网,审查了K&R和CRM,找不到任何支持.

(C99,7.1.3.p1)"所有以下划线开头的标识符以及大写字母或另一个下划线始终保留用于任何用途."

现在关于K&R第2版的书写:

(K&R第2版,2.1)"不要用下划线开始变量名,但是,因为库例程经常使用这些名称."

如果CRM实际上是指CARM(Harbison&Steele的CA参考手册):

(CARM第5版,10.1.1保留库标识符):"为C实现保留的标识符包括:[...]用于宏,关键字或全局变量,以_开头的标识符和第二个_或大写字母(_ _ STDC _...除外)"