[C言語] 関数指定子 inline とは何か
DBG=-g かつ -std=c99の場合 1. inlineの関数定義は消える 2. しかし呼んでる箇所にinlineで展開はされない 3. よって未定義シンボルになる という動作をするらしい…
2015-02-04 01:06:47まぁこの挙動を期待してるわけではないだろうから inline -> static inline に該当箇所書き換えてやりゃいいだけでlib/46163は片付くんだろうけど、upstream直ってんのかなこれ
2015-02-04 01:09:03うーんコメントみると Make sure this inline function is exported regardless of GNU89 or C99 inlining semantics as it is part of the libobjc ABI. とある
2015-02-04 01:22:016.7.4に実例つきでOKになってるな、プロトタイプでexternあるなら外部定義は必ず作らなければならない、一方関数定義がinlineだから同じ翻訳単位での呼出はインライン展開「してもよい」だわ
2015-02-04 01:35:06archive.cの方で関数定義でinline宣言してて未定義になるのは、これプロトタイプでexternしてるわけじゃないからstatic inlineに変えてよさげ
2015-02-04 02:03:37例のjの字が、さっきのインライン関数周りで、相変わらず間違った修正してて草生える cvsweb.netbsd.org/bsdweb.cgi/src…
2015-02-04 03:16:29厳密にいえばABI破壊してるけど、そもそもヘッダに無い関数でstaticにし忘れただけなんで隠しても問題ないでしょ、libobjc.defにまでDLL EXPORTまでしてるのは単にWindowsわからんから適当に真似して書いただけと思われる
2015-02-04 05:26:37どうしても厳密にABI保証したけりゃinline -> static inlineではなく、extern inlineにすればいい
2015-02-04 05:27:27