Iちょうどインライン関数のリンケージをテストするために、2つのファイルを作成し、最初の1インライン関数のリンケージの変更
#include <iostream>
using namespace std;
inline int f1(int a,int b){
a=a+b;
while(a!=0)
a--;
cout<<"inline";
return a;
}
秒1:
int main(){
extern void f1(int a,int b);
f1(1,2);
}
G ++ frist.cc second.cc
リンカraiseエラーが発生しました。インライン関数がデフォルトであると予想しています内部結びつきは結果が正しいので。
しかし、私は最初のファイルにインライン関数の呼び出し機能を追加したとき:
#include <iostream>
using namespace std;
inline int f1(int a,int b){
a=a+b;
while(a!=0)
a--;
cout<<"inline";
return a;
}
int callf1(){
f1(10,2);
}
、それが合格し、エラーなしで実行することができ、再びコンパイルので、私は持っていたもの尋ねたいですここで起こった? C++で
インライン関数の呼び出し関数がある場合にウィークシンボルが追加されました。 '00000000 ** W ** _Z2f1ii' –
g ++に' -O1'を追加すると、リンクが止まります。 –