MIN
C でとが定義されている場合、どこで定義されていますMAX
か?
これらをできるだけ汎用的かつ型安全に実装する最良の方法は何ですか? (主流のコンパイラ用のコンパイラ拡張機能/組み込みが推奨されます。)
ベストアンサー1
MIN
C でとが定義されている場合、どこで定義されていますMAX
か?
そうじゃないよ。
これらを、可能な限り汎用的かつ型安全に実装する最良の方法は何ですか (主流のコンパイラ用のコンパイラ拡張/組み込みが推奨されます)。
#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
関数として。特にコードをデプロイする予定がある場合は、のようなマクロは使用しないでください。独自のマクロを作成するか、標準のマクロのようなものを使用してください。fmax
またはfmin
、またはマクロを修正するにはGCC の typeof(型安全性のボーナスも得られます)GCC ステートメント式:
#define max(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
誰もが「二重評価については知っているから問題ない」と言いますが、数か月後には、最もばかげた問題を何時間もかけてデバッグすることになります。
__typeof__
の代わりにを使用することに注意してくださいtypeof
:
ISO C プログラムにインクルードされたときに動作する必要があるヘッダー ファイルを作成する場合は、
__typeof__
の代わりに を記述しますtypeof
。