关于为什么头文件中的变量或者函数会出现重复定义的一个理解
为了避免头文件在被重复包含的时候,出现重复声明的问题,在头文件中会使用如下的结构:
#ifndef MYHEADER_H
#define MYHEADER_H
. . . // This will be seen by the compiler only once
#endif /* MYHEADER_H */
这样就会在编译的时候,如果一旦在一个模块(cpp文件)中,注意:是一个模块中被重复包含了,那么回吧重复包含的部分屏蔽掉。而在不同的模块中,这个头文件被同时包含了,那么它还是会产生两个包含文件的展开,这样才能保证在编译的时候正确解释在模块中使用到的这些在头文件中声明的类型或者函数。如果有一个头文件被不同模块包含,并且该头文件中只是声明了函数接口或者数据类型,这些声明并不会被放入到模块的目标文件obj中。而如果头文件中一旦出现了变量定义或者函数定义,那么,在编译阶段,他们就会被放入到各自的obj中。这样,在链接的时候,当把obj整合成可执行文件的时候,就会出现变量或者函数重复定义的问题。
没有评论:
发表评论