私は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 セマンティクスを使用する」ために取得されたものです。
バージョンの 1 つがインライン化されている場合、呼び出される two() 関数のバージョンはどのように決定されますか?
出力からわかるように、インライン バージョンは two() で呼び出され、関数ポインターなしで直接呼び出されます。一方、関数ポインタを使用すると、インライン化されていないバージョンが呼び出されます。そのような電話を解決するための一般的なルールはありますか?