我正在阅读有关 C/C++ 中的内联函数的信息:
对于以下代码:
inline.h:
#include<stdio.h>
extern inline void two(void){ // GNU C uses this definition only for inlining
printf("From inline.h\n");
}
main.c:
#include "inline.h"
int main(void){
void (*pTwo)() = two;
two();
(*pTwo)();
}
two.c:
#include<stdio.h>
void two(){
printf("In two.c\n");
}
输出如下:
From inline.h
In two.c
它说这个输出是通过“对内联关键字使用 gcc 语义”获得的。
如果其中一个版本被内联,如何决定调用 two() 函数的版本?
正如我从输出中看到的那样,内联版本是用 two() 直接调用的,即没有任何函数指针。然而,当使用函数指针时,将调用非内联版本。是否有解决此类呼叫的一般规则?