永发信息网

内联函数的定义对编译器而言必须是可见的?什么意思?

答案:2  悬赏:0  手机版
解决时间 2021-03-13 15:27
对于下面的声明和定义,你会将哪个放在头文件,哪个放在程序文本文件呢?
为什么?
(a) inline bool eq(const BigInt&, const BigInt&) {...}
(b) void putValues(int *arr, int size);
【解答】
二者均应放在头文件中。
(a)虽然是一个函数定义,但这是一个内联函数的定义,也应该放在头文件中。
因为:内联函数的定义对编译器而言必须是可见的,以便编译器能够在调用点
内联展开该函数的代码,这样一来,仅有函数原型是不够的;而且内联函数有
可能在程序中定义不止一次,这时必须保证在所有源文件中,其定义是完全相
同的。把内联函数的定义放在头文件中,可以确保在调用函数时所使用的定义
式相同的,并且保证在调用点该函数的定义对编译器是可见的。

(b)是函数声明,适合放于头文件中。
最佳答案
解答其实已经说得很清楚了,编译器在看到程序中调用普通函数的代码时,是在这里填一个函数的地址,然后在执行时跳转到函数那边去。而碰到内联函数时,是将函数的内容全部在调用点展开,所以它必须知道这个内联函数的定义是什么,否则无法展开。而将内联函数的定义放在头文件(.h)中,一旦include了该头文件,就能看到内联函数的全部内容了,也就可以在调用点完全展开内联函数。如果将内联函数放在源文件中(.c),编译器在看到内联函数的调用时,是无法知道内联函数的内容的,因此也无法展开,所以必须将内联函数定义在头文件中。
全部回答
你好! 这个你都不知道什么意思吗 如果对你有帮助,望采纳。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我的卡是工行卡,能在超市购物用么?支持银联
还是刚刚买手机的问题,我想问下在实体店里买
结婚新娘一定要化妆吗?
戴尔外星人电脑官网价格表格
ABS和PC的区别是什么?
兄弟牛肉拉面地址在什么地方,想过去办事
快玩游戏盒3.5.4可以上传单机游戏的存档咩?
失落的星球出Fatal error怎么解决?
在家里的笔记本上找到一个信号很强的无限网络
南方人和北方人指路有什么区别吗
青春美容养生馆我想知道这个在什么地方
考虑买名爵31.5l自动精英版,但是不知道其性
2017执业医师考试报名条件有哪些
以宣传福州传统经典文化为内容的童谣
手机主屏色彩不高但像素高的手机拍出的照片传
推荐资讯
永兴快捷酒店怎么去啊,有知道地址的么
袁家厨房明新私房菜地址在什么地方,想过去办
老字号小自选在哪里啊,我有事要去这个地方
(济南)我后天早上八点的飞机,在玉泉森信坐最
星桥鹊驾,经年才见,想离情,别恨难穷。意思是
博世壁挂炉在工作时温度显示突然从50度一下就
2+5+6+9+8+7+3+25+6+7+5+9+56+8+4=
张煜佳这个名字好不好
avi格式修复
起一个伤感点大气的网名
南京梅花山有什么玩的?清明节去
《道路交通安全法》是否适用于地铁?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?