Macro に副作用つき引数

Splint というのが check してくれるらしい。が。使ってみるといきなり debug.c でコケたり、大丈夫とわかってるのまで paranoid に警告しすぎるせいで必要な情報を抽出しにくかったり (人工無能ホスィ)、細かく制御するには source の大幅な変更が必要だったりと散々。

C macro

前巻までのあらすじ:
太田さんは debug してる最中、macro 引数に関数 call が埋めてある code を発見した。しかも、その macro は引数を複数回評価するものだった! C の罠に愕然と項垂れる一同。それどころか、「前巻」と打つと「全巻」しか出ないのであった@anthy

私は今までそんな code を書いた覚えは無い。その心は果たして本当にやらかしてないのか気づいてないだけなのか。後者っぽいだけに(((; ゜Д゜))))ガクガクブルブル

で、思ったんですが lint(1) ってこれ拾ってくれないんですか? CONSTCOND なんかよりよっぽど意義のある check だと思えるんですけども。基本的に、大文字だけの関数っぽい物体の呼び出しに

  • 関数 call
  • ++, --
  • 代入

が入ってるか調べるだけでかなりの精度が期待できると思うんですが。

;; 言いぐさからわかると思いますが、CONSTCOND はあんまり意味ないと思ってます

;; ん? 半角仮名が通るようになってる。どちらかといえば彼らには絶滅してほしいクチなので修正