C言語のMINとMAXについて質問する

C言語のMINとMAXについて質問する

MINC でとが定義されている場合、どこで定義されていますMAXか?

これらをできるだけ汎用的かつ型安全に実装する最良の方法は何ですか? (主流のコンパイラ用のコンパイラ拡張機能/組み込みが推奨されます。)

ベストアンサー1

MINC でとが定義されている場合、どこで定義されています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

おすすめ記事