Windows上で動作するフリーの開発環境 CygwinとMinGWに関する相談スレッドです。
過去スレ:
Cygwin + MinGW + GCC 相談室 Part 7
http://peace.2ch.net/test/read.cgi/tech/1357019230/
Cygwin + MinGW + GCC 相談室 Part 6
http://toro.2ch.net/test/read.cgi/tech/1304609116/
Cygwin + MinGW + GCC 相談室 Part 5
http://hibari.2ch.net/test/read.cgi/tech/1269400706/
Cygwin + MinGW + GCC 相談室 Part 4
http://pc12.2ch.net/test/read.cgi/tech/1221233882/
cygwin + mingwn + gcc 相談室 Part3
http://pc11.2ch.net/test/read.cgi/tech/1177944767/
cygwin + mingwn + gcc 相談室 Part2
http://pc11.2ch.net/test/read.cgi/tech/1126103347/
cygwin + mingwn + gcc 相談室
http://pc8.2ch.net/test/read.cgi/tech/1058134693/
関連サイト:
Cygwin http://www.cygwin.com/
MinGW http://www.mingw.org/
関連スレッド:
GCCについて part10
http://toro.2ch.net/test/read.cgi/tech/1315026784/
探検
Cygwin + MinGW + GCC 相談室 Part 8
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
2014/09/23(火) 00:20:11.40ID:G97CLCj1989デフォルトの名無しさん
2025/12/03(水) 11:41:04.56ID:G3Cx7y7o inline関数を使うときに
VCだと
inline int hoge(int fuga){ 中身 }
で使えるのに
mingw/gccとかだと
static inline int hoge(int fuga){ 中身 }
って描かないと使えない
なんで?
(.cに描くとか.hに描くとかそういうの無関係な話で)
VCだと
inline int hoge(int fuga){ 中身 }
で使えるのに
mingw/gccとかだと
static inline int hoge(int fuga){ 中身 }
って描かないと使えない
なんで?
(.cに描くとか.hに描くとかそういうの無関係な話で)
990デフォルトの名無しさん
2025/12/03(水) 12:52:21.06ID:yVL3HxQ8 使えるよ
リンカーエラーでも出てる?
リンカーエラーでも出てる?
991デフォルトの名無しさん
2025/12/03(水) 12:55:52.88ID:yVL3HxQ8 あーわかった
>>989 cではなくてc++でコンパイルしな?
>>989 cではなくてc++でコンパイルしな?
992はちみつ餃子 ◆8X2XSCHEME
2025/12/03(水) 14:09:55.16ID:OnxLfrF+ >>989
C ではインライン定義は外部定義 (external definition; 要するに普通の実体ある関数) の代替を与えるというルールで、インライン定義自体は外部定義を与えない (作らない)。
呼び出しのほうは実体のある外部定義を呼び出すか代用品であるインライン定義を使うかは未規定。
インライン化用の代用品を使うかもしれないし、実体のある関数を呼び出すかもしれない。
実体のある関数を使う選択をしたときに >>989 の状況では実体のある関数は作られていないから存在しないというリンカエラーになる。
GCC でも最適化オプションを付けてインライン化されてしまったときは (インライン化されたら関数をリンクする必要がないので) エラーにならずにリンクが完了することもある。
以下のように extern 付きの宣言を付けるとインライン関数定義から外部定義の生成を強制できるのでこれで対処することも出来る。
inline void foo(void) {}
extern void foo(void);
int main(void) {
foo();
}
C++ だとインライン関数がもう少し普通の関数と扱いが平等に近づいているので分かり易いんだが……
C ではインライン定義は外部定義 (external definition; 要するに普通の実体ある関数) の代替を与えるというルールで、インライン定義自体は外部定義を与えない (作らない)。
呼び出しのほうは実体のある外部定義を呼び出すか代用品であるインライン定義を使うかは未規定。
インライン化用の代用品を使うかもしれないし、実体のある関数を呼び出すかもしれない。
実体のある関数を使う選択をしたときに >>989 の状況では実体のある関数は作られていないから存在しないというリンカエラーになる。
GCC でも最適化オプションを付けてインライン化されてしまったときは (インライン化されたら関数をリンクする必要がないので) エラーにならずにリンクが完了することもある。
以下のように extern 付きの宣言を付けるとインライン関数定義から外部定義の生成を強制できるのでこれで対処することも出来る。
inline void foo(void) {}
extern void foo(void);
int main(void) {
foo();
}
C++ だとインライン関数がもう少し普通の関数と扱いが平等に近づいているので分かり易いんだが……
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を超えると書き込みができなくなります。
ニュース
- 東京の自販機そばに金塊4200万円分、何者かに持ち去られる…札幌の50代が8000万円振り込んだ後に上京して被害 [どどん★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- 【東京】「家族で話題にして」 “世田谷一家殺害から25年 警視庁が呼びかけ [煮卵★]
- 【鹿児島】容疑者は大学生。国道3号を横断中の母娘を車ではねる――「太陽がまぶしくて見えなかった」。20歳女を現行犯逮捕 日置署 [ぐれ★]
- ハイヒールリンゴ 接待客の料理に長い毛髪混入、店から謝罪もシェフがつるっぱげで…「どうしたらええねん」 [muffin★]
- 【芸能】ワイドショーはオワコンなのか... フジ・朝の情報番組『サン!シャイン』1年で打ち切り報道 テレビよりSNSの視聴者 [冬月記者★]
- 【実況】博衣こよりのえちえちドラクエ1&2リメイク🧪★9
- セブンイレブンの弁当
- (ヽ´ん`)「はっきり言ってやろうか?この国は終わりだ」 [434776867]
- 高市「たまたま私が支部長だった。高市早苗に対する献金ではない」→自分の公式サイトで、ガッツリ寄付を呼びかけていた事が判明 [594040874]
- 【悲報】婚活女性さん、身長の中央値165cm、体重の中央値は60kgで、幕之内一歩とほぼ一緒の恵体だった… [257926174]
- 【悲報】女芸人のヤツ、ワイしか見てない
