【问题标题】:Header guards and pragma once [duplicate]标头守卫和编译指示一次[重复]
【发布时间】:2013-02-15 21:24:28
【问题描述】:

1.我看到很多地方,Header guards 和 pragma once 也以特定的顺序一起使用(顺序真的重要吗?)

2.另外一个疑问是默认情况下,每当 VS IDE 生成一个新的类文件时,它会将#pragma 一次放入实现文件(.cpp)。这真的需要吗?

#ifndef MYHEADER_H
#define MYHEADER_H

#pragma once

//my set of includes

哪种是标头保护的正确方法,或者更确切地说是阻止多个包含?

【问题讨论】:

标签: c++


【解决方案1】:
#pragma once  

虽然被许多流行的编译器/预处理器支持,但它是非标准的。见Is #pragma once a safe include guard?

#ifndef MYHEADER_H
#define MYHEADER_H
#endif // ndef MYHEADER_H

保证适用于所有 C++ 编译器/预处理器。

同时使用两者没有意义。

【讨论】:

    【解决方案2】:

    "#pragma once" 是特定于编译器的,可能不可移植。 “#ifndef/#define/#endif”更便携,适用于所有预处理器。

    【讨论】:

    • 那么这是否意味着将两者都添加是一种好习惯?我无法解释为什么两者都在代码中使用?如果还看到#pragma,它是否会提供任何额外的编译优化,或者编译器优化也会取消#defines?
    • 我做一次#pragma 并且包括警卫。我从未比较过 #pragma once 与 include guards 的性能,但我可以想象在 #pragma once 之后中止解析比查找 #endif 更快。
    猜你喜欢
    • 2013-03-31
    • 2013-04-11
    • 2023-03-13
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多