气馁的pragma使用GCC

Con*_*uit 4 c++ gcc pragma

几乎所有的C++程序都需要标头保护,但是在严格执行命名约定时会很痛苦 - 尤其是在重构期间.当使用GCC(和许多其他编译器)时,我们在预处理器命令中有一个替代方案#pragma once.我看到的反对使用这个命令的建议(例如在v3.4之前缺乏支持)对我的个人项目来说并不十分有说服力.我想#pragma once尽可能使用.

总而言之,海湾合作委员会网站上的这句话让我停下来:

请注意,一般我们不建议使用编译指示; 有关详细说明,请参见函数属性.

也许只是我的低级熟练程度级别的C++体验对我不利,但我没有在该链接所指向的网站上看到该建议的任何解释.是否有人能够用(半)外行人的条款解释他们推荐的理由?

Ros*_*dge 5

一般建议来自这样一个事实:不仅不能保证其他编译器实现#pragma once(或任何其他编译指示),也不能保证其他编译器#pragma once以与GCC相同的方式实现.另一个编译器可以合法地给它一个完全不同的含义,或者更糟糕的是,它是一个微妙的不同的含义 如果您不关心代码是否可移植,则可以忽略该建议.

就个人而言,我只是在自己的标题中使用普通#ifndef/ #define包含警卫,即使对于我自己的个人项目也是如此.打字并不是那么多,并且保证可以在任何地方工作.与保护宏的命名冲突对我来说从来都不是问题,我尽量不担心我没有的问题.