是否可以保证每个库标题看起来都像这样?
#ifndef STDIO_H
#define STDIO_H
/* contents here... */
#endif
Run Code Online (Sandbox Code Playgroud)
你能告诉我一个消息来源吗?
谢谢!
不,GCC不会保护您免受不使用您所描述的包含保护的库 - 这取决于相关库.(而不是海湾合作委员会的一部分.)
所有着名的C标准库(glibc,newlibc,ulibc)都能正确地保护它们的包含.(因为它们被广泛使用,很快就会发现这样一个明显的问题.)
编辑:在您的第二个评论之后,您的问题现在更有意义.引自ISO/IEC 9899:1999(C99),第7.1.2章标准标题,第4段,第一句:
标准标题可以按任何顺序包含在内; 在给定范围内,每个都可以被包含多次,除了包含<assert.h>的效果取决于NDEBUG的定义(见7.2)之外,其效果不同于仅被包含一次.
这意味着,如果您遇到的任何标准C库给您带来麻烦,那就破坏了.
C99标准(ISO/IEC 9899:TC3)明确规定:
标准标题可以按任何顺序包含在内; 在给定范围内,每个可以被包含多次,除了包含的效果
<assert.h>取决于NDEBUG的定义(见7.2)之外,没有任何效果与仅被包括一次不同.
第7.1.2节中的第4点