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

sil*_*ent 5 c++ compiler-construction gcc include-guards header-files

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

#ifndef file_H
#define file_H

class ex{
private:

public:
};

#endif
Run Code Online (Sandbox Code Playgroud)

我已经被要求在相同的文件中编写方法定义,我已经完成了,我的问题是"#endif"是否保留在类声明之后的位置,还是在文件末尾之后.类方法定义?

Uri*_*Uri 6

在文件的末尾.

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

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

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