#pragma曾经添加包含警卫吗?

Pra*_*ari 6 c c++

#pragma once不是标准的,但是由gcc和VC++等编译器支持.它有助于避免包含警卫.

但是,在内部,编译器是否添加包含保护#pragma once?如果没有,编译器如何确保只包含一次这样的头?

Mat*_*son 10

我确信它就像include_once在PHP中一样 - 有一个"已包含的文件"表.在这种情况下,编译器在列表中查找它将要包含的文件,如果已经包含文件,则不要再次包含它.如果编译器在处理文件时看到a #pragma once,则将此文件添加到"已包含的文件"中.

所以它与细节级别的包含防护不同,但它与包含防护具有相同的效果.它还使代码不那么便携,因为有很多编译器不支持这个.

  • 实际上所有的主要编译器现在都支持它. (3认同)
  • "所有主要"可能并不涵盖大部分嵌入式市场......如果我可以指出"如果代码是在嵌入式编译器中编译的话,这将无效",我相信我会使用当他们的论点在那一点上失败时,它会回到别人身上......;) (2认同)
  • 是的,当然,如果你使用`gcc`作为嵌入式编译器,那很好.我刚检查了ARM的版本,它也支持它.但是有些人使用不太常见的编译器,例如IAC(google甚至无法找到"#pragme once IAC"的好评,所以我猜这不是那么多...)和"特定于供应商"的编译器......当然,这十年没有出现的编译器有时会出现在嵌入式场景中...... (2认同)