有关条件编译的快速问题(ifndef)

时间:2010-05-16 04:10:02

标签: c++ gcc compiler-construction header-files include-guards

这可能是一个非常愚蠢的问题,但我需要确定。我在头文件中得到了一个类声明,例如。

#ifndef file_H
#define file_H

class ex{
private:

public:
};

#endif

并且我已被要求在同一个文件中编写方法定义,我已经完成了,我的问题是“#endif”是否保留在类声明之后的位置或者它是否在结束时类方法定义后我的文件?。

1 个答案:

答案 0 :(得分:6)

在文件的末尾。

#ifndef模式的这种形式的目标是防止在编译单元中出现两次相同声明或定义的情况。

这样做是因为C文件可能包含多个H文件,链上的某个地方可能依次包含相同的文件。如果您只是运行没有这些的预处理器,您将拥有H文件的多个副本。这样,您有多个副本,但预处理器会在第一次遇到后忽略所有内容。

由于您不应该多次定义任何内容,如果必须将方法定义放在头文件中,请将它们放在#endif中。