64,654
社区成员
发帖
与我相关
我的任务
分享
一个头文件被多个源文件包含。所有文件在一个工程里。
请问:
1、每个源文件均调用了头文件中的函数,系统链接时怎么解决重复定义问题?
.h文件一般只声明函数,而函数体,也就是函数的实现部分要放到相应的cpp里
只有inline和class 内定义的函数可以放到.h里,再加上使用#ifndef #define宏
就可以确保一个cpp只导入这个.h的声明一次
如果你把普通函数的实现放在.h里,那么当多个cpp同时include这个.h的时候,就
会出现重定义错误,这个编译器会告诉你
2、没有调用头文件的函数,是不是系统就不处理了?
这个你不太需要去关系,各给编译器可能有不同的实现
你说的不处理是什么意思?一般来说所有的函数都会生
成对于的2进制指令,用不用时另外的事,但如果对于
dll,一个没使用函数是否载入那就跟系统相关了,这个不
深究
3、头文件中内联函数是怎么处理的?
#include 就相当于把.h文件的内容在你的#include地方展开
对于inline编译器在可能的情况下会把代码复制到你使用它的地方
4、如果头文件中的内联函数没被内联,是不是就和普通的函数一样处理了?(新规、旧规区别?)
应该是按普通函数处理
#ifndef xxx
#define xxx
your decleration
#endif