GCC是否保护程序员免受包括C库头部在内的多个程序员的影响?

Ori*_*ski 1 c header include

是否可以保证每个库标题看起来都像这样?

#ifndef STDIO_H
#define STDIO_H
/* contents here... */
#endif
Run Code Online (Sandbox Code Playgroud)

你能告诉我一个消息来源吗?

谢谢!

Dev*_*lar 8

不,GCC不会保护您免受不使用您所描述的包含保护的库 - 这取决于相关库.(而不是海湾合作委员会的一部分.)

所有着名的C标准库(glibc,newlibc,ulibc)都能正确地保护它们的包含.(因为它们被广泛使用,很快就会发现这样一个明显的问题.)

编辑:在您的第二个评论之后,您的问题现在更有意义.引自ISO/IEC 9899:1999(C99),第7.1.2章标准标题,第4段,第一句:

标准标题可以按任何顺序包含在内; 在给定范围内,每个都可以被包含多次,除了包含<assert.h>的效果取决于NDEBUG的定义(见7.2)之外,其效果不同于仅被包含一次.

这意味着,如果您遇到的任何标准C库给您带来麻烦,那就破坏了.


Eva*_*ran 7

C99标准(ISO/IEC 9899:TC3)明确规定:

标准标题可以按任何顺序包含在内; 在给定范围内,每个可以被包含多次,除了包含的效果<assert.h>取决于NDEBUG的定义(见7.2)之外,没有任何效果与仅被包括一次不同.

第7.1.2节中的第4点