疏影横斜水清浅
暗香浮动月黄昏
重定义问题:
之前由碰到过类似的问题,然后可以通过条件编译来解决:
#ifndef XXXX
#define XXXX
...
...
#endif
大概就是头文件被多个源文件包含以后,里面的函数也会被多次编译生成可执行文件,就发生了重定义的问题。通过条件编译,可以解决一种情况下的问题,那就是头文件中只声明,而不定义或者说不实现。
发生这个问题的本质原因是,当头文件函数被多次编译后,该函数被调用时,编译器不知道该调用哪个函数了,也就是存在二义性问题。
那如何解决呢?
答案是:内联函数。
这里要思考,我们为什么会把一些函数的声明和定义都放到头文件里?
因为这些函数很简单,类似于一种工具,可能会被经常调用。。。
内联函数正是为了这种作用出现的。
为什么内联函数可以解决这个问题呢?
因为内联函数和宏定义类似,在调用点被展开的,也就是相当于手动复制了一份代码在调用点。
多个地方执行同一份代码会产生重定义问题吗?显然不会。