永发信息网

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

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

(b)是函数声明,适合放于头文件中。
最佳答案
  • 五星知识达人网友:北城痞子
  • 2021-03-13 12:01
解答其实已经说得很清楚了,编译器在看到程序中调用普通函数的代码时,是在这里填一个函数的地址,然后在执行时跳转到函数那边去。而碰到内联函数时,是将函数的内容全部在调用点展开,所以它必须知道这个内联函数的定义是什么,否则无法展开。而将内联函数的定义放在头文件(.h)中,一旦include了该头文件,就能看到内联函数的全部内容了,也就可以在调用点完全展开内联函数。如果将内联函数放在源文件中(.c),编译器在看到内联函数的调用时,是无法知道内联函数的内容的,因此也无法展开,所以必须将内联函数定义在头文件中。
全部回答
  • 1楼网友:掌灯师
  • 2021-03-13 12:10
你好! 这个你都不知道什么意思吗 如果对你有帮助,望采纳。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯