1. ホーム
  2. c

[解決済み] CのMINとMAX

2022-03-14 16:52:51

質問

どこですか? MINMAX C言語で定義されているとしたら、それは何ですか?

これらを、できるだけ一般的に、かつ型安全に実装するためには、どのような方法があるでしょうか?(主流のコンパイラのためのコンパイラ拡張/ビルトインが望ましい。)

どのように解決するのですか?

<ブロッククオート

どこですか? MINMAX C言語で定義されているとしたら、それは何ですか?

そうではありません。

これらを、できるだけ一般的で型安全な形で実装する最善の方法は何でしょうか(主流のコンパイラのためのコンパイラ拡張/ビルトインが望ましい)。

関数として。のようなマクロは使いません。 #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 .