编译器决定不内联函数会导致多个定义吗

can compiler deciding not to inline a function lead to multiple definitions?

本文关键字:定义 决定 函数 编译器      更新时间:2024-09-23
我知道编译器可以决定是否内联函数。假设有人在头文件中将函数定义为inline,函数体也在头文件中。此外,假设函数很长,编译器决定不实际内联此函数。

f1.h:

inline void f1()
{
/* really long function */
}

当函数包含在多个cpp转换单元中时,它现在会发生什么?这不会打破一个定义规则,并在链接时导致多个定义吗?或者inline属性是否保留,即使它实际上没有内联?

foo.cpp:

#include "f1.h"
/* code here */

bar.cpp:

#include "f1.h"
/* code here */

简而言之:任意"优化决策";编译器在编译过程中所做的任何操作都不会导致编译错误。所以答案是否定的。