注释会阻止 header 守卫优化吗?

Do comments prevent a header guard optimization?

C 编译器是否缓存 header 文件并在文件以注释开头时只解析一次?

// Some comment
#ifndef HEADER_GUARD
#define HEADER_GUARD

#endif

问题是关于编译器的,它可以缓存 headers 以不解析它们超过一次。

是的,这个优化完成了。 gcc 在这里非常明确地记录它:https://gcc.gnu.org/onlinedocs/cppinternals/Guard-Macros.html

基本上,如果你有一个 well-written include 守卫,gcc 不会触及 header 两次。包含保护之外的注释不会停止优化(否则几乎所有 open-source header 文件之前的所有许可注释将毫无价值)。