読者です 読者をやめる 読者になる 読者になる

テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(macro-of-inline) ANSI C(C89)はinlineをサポートしない

昨日から取り組んでいたガード節対応の実装が終わったのでdevelopにマージした. 努力しすぎたため, 朦朧としている.

akiradeveloper/macro-of-inline · GitHub

マクロ化したものをコンパイルするテストを書いていて気づいたのだが, ANSI Cはinlineをサポートしない. non-voidな関数にinlineが残っていると, gcc -ansiとした時にerrorとなる.

Does ANSI-C not know the inline keyword? - Stack Overflow

によると, 厳密にいうとinline keywordが定義されたのはC99からである. しかし, 利便性の問題から, C89の実装と言ってもinlineをサポートしている場合が多いとのこと.

私は, macro-of-inlineの技術的な側面しか興味がなかったので, macro-of-inlineの有用性について深く考えてなかったが, もしかして, inlineがサポートされないというのは, 技術的にだるいからということの他に, ANSI準拠を徹底した結果というという場合もあるのではないか. だとすると, macro-of-inlineはかなり有用ということになる. Slideshareなどにドキュメントをうpして広めるとか, LTか何かで発表するとかしたらいいかなと思う. C言語野郎の集いに向けて発表しても良い. しかしおっさんしかいなそうだ.

他には, "^;¥n"のパターンは, ISOがOKしないため, pedanticをつけた場合にwarningとなる. これは, Anyノードの定義をupstreamの外で行ったことの弊害だが, 単純に文字列処理として排除することにした. たぶん, ほぼ100%正しく動くだろう.