>>989
C ではインライン定義は外部定義 (external definition; 要するに普通の実体ある関数) の代替を与えるというルールで、インライン定義自体は外部定義を与えない (作らない)。
呼び出しのほうは実体のある外部定義を呼び出すか代用品であるインライン定義を使うかは未規定。
インライン化用の代用品を使うかもしれないし、実体のある関数を呼び出すかもしれない。
実体のある関数を使う選択をしたときに >>989 の状況では実体のある関数は作られていないから存在しないというリンカエラーになる。
GCC でも最適化オプションを付けてインライン化されてしまったときは (インライン化されたら関数をリンクする必要がないので) エラーにならずにリンクが完了することもある。
以下のように extern 付きの宣言を付けるとインライン関数定義から外部定義の生成を強制できるのでこれで対処することも出来る。
inline void foo(void) {}
extern void foo(void);
int main(void) {
foo();
}
C++ だとインライン関数がもう少し普通の関数と扱いが平等に近づいているので分かり易いんだが……
探検
Cygwin + MinGW + GCC 相談室 Part 8
レス数が950を超えています。1000を超えると書き込みができなくなります。
992はちみつ餃子 ◆8X2XSCHEME
2025/12/03(水) 14:09:55.16ID:OnxLfrF+993デフォルトの名無しさん
2025/12/03(水) 22:07:45.02ID:Eh+HvnbR994デフォルトの名無しさん
2025/12/04(木) 05:43:42.35ID:7puO0DHP .hの方にinlineで
.cの方にexternってことか
気持ち悪いけど納得
.cの方にexternってことか
気持ち悪いけど納得
995デフォルトの名無しさん
2025/12/12(金) 16:01:42.00ID:jYZhnAHV 今では LTO を有効にすれば翻訳単位をまたいだ最適化 (インライン化を含む) もされるし、 inline 指定をつけてもインライン化するとは限らない。
規則を理解するに越したことはないけど現代的なリッチなコンパイラでは最適化のために inline 指定をする必要性は薄いと思う。
規則を理解するに越したことはないけど現代的なリッチなコンパイラでは最適化のために inline 指定をする必要性は薄いと思う。
レスを投稿する
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 ★2 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★7 [蚤の市★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 ★2 [蚤の市★]
- 公用車カーナビのNHK受信料「全額免除を」 千葉市議会、国に制度創設求める意見書可決 [少考さん★]
- 【朗報】愛国保守党の公約、ガチでアリだと話題にwwwwwwwwww
- 【朗報】南鳥島のレアアース、中国産の「20倍の純度」青山繁晴氏「日本は資源大国」日本復活のファンファーレが鳴り響く! [673057929]
- 愛国者「釘を使わない日本独自の伝統工法スゴイ!」X民「それ中国起源ですよ」→批判殺到 [834922174]
- ハイドロポンプ←これなんて略してる?
- 👊😅👊三☁😶‍🌫三⛅🏡
- コーヒー、来年3月から30パーセント値上げへ [709039863]
