2003年12月11日(木) [長年日記]
■ [c] __P
既存のソースを見ていたら、関数宣言に「__P」というマクロを使用していた。これの意味を知らなかったのでF先生に教えてもらった。ANSI Cの関数宣言を理解できないコンパイラへの配慮のようだ。
NetBSDでは sys/cdefs.h にて
#if defined(__STDC__) || defined(__cplusplus) #define __P(protos) protos /* full-blown ANSI C */ … #else /* !(__STDC__ || __cplusplus) */ #define __P(protos) () /* traditional C preprocessor */
と定義されていた。
FreeBSDの man style に__Pについての記述があり、4.7と5.1で内容が変わっているようだ。
一般にソースファイルが K&R 旧約聖書コンパイラでコンパイル可能である (べき) 時にのみ、インクルードファイル <sys/cdefs.h> の __P マクロを使用します。新しいコードでの __P マクロの使用は反対されていますが、既存のファイルに対する修正はそのファイルの規約と首尾一貫しているべきです。
__P マクロは使用しません。
__Pは古臭い習慣だと思っていいのだろうか。
某日記にもコメントがあった。
あと、__P に関しては、 最近は FreeBSD / OpenBSD で排斥が進んでますが、 NetBSD では反対意見が出たのでそのままです。
プログラムの性質によって、古い処理系を考慮する必要があるかどうかプログラマが判断すべきなのだろう。
追記
__Pマクロの解説記事があったのでメモ。
- sys/cdefs.hとは何ですか? (その2) (Keep It Simple, i'm Stupid.)
■ プチショック(2)
暖房つけているのになんだか寒いなあと思っていたら、冷蔵庫の扉が開いていた。
■ やること
相澤くんに4500円払う。