4

これは私がObjective-Cを学ぶために読んでいる本の一部です。

以下は、最大2つの値を与えるMAXと呼ばれるマクロを定義します。#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )

そして、この本には、読者にマクロ(MIN)を定義して最小の2つの値を見つけるように求める演習とMAX3、最大3つの値を与えると呼ばれるマクロを定義するように求める演習があります。これらの2つの定義はに似ていると思いますが、式が最大値を見つけるMAX方法がわかりません。MAX私がこれをしただけなら

int limits = MAX (4,8)

値8を割り当てるだけlimitsです。これは、変数の最大値を見つけることと何の関係がありますか?

4

4 に答える 4

12

値と変数を混同していると思います。リストしたマクロの例は、2つの値の比較に拡張され、2つの値の大きい方(つまり、大きい方、aまたはb)を返します。ですから、あなたは正しいです。int limits = MAX(4,8)に割り当てるだけで、に保存できる最大値を見つける8ことlimitsとは何の関係もありませんlimits

ヘッダーlimits.hはINT_MAX、システム上の変数タイプの最小値/最大値に関する情報を提供するような多くの値を定義します。

于 2012-07-29T16:14:39.110 に答える
12

それを分解するには:

宣言:

#define MAX(a,b)

aがより大きい場合はbaelse use b:を使用します。

( ((a) > (b)) ? (a) : (b) )

次に、MIN式を作成するには、同様の形式を使用します。

#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
                        ^

次に、MAX3式を作成するために、それらを組み合わせることができます。

#define MAX3(a,b,c) ( MAX(a, MAX(b,c)) )

<具体的には、このマクロは、またはを使用して比較できるスカラー(Cビルトイン)で使用することを目的としています>。objc変数を渡した場合、アドレスが比較され、MAXはより高いアドレスを持つアドレスを返します(実際にobjcインスタンスのアドレスを比較したい場合は非常にまれです)。

また、これはマクロがどのようにあなたを噛むことができるかの典型的な例であることに注意してください。マクロを使用すると、プリプロセッサはパラメータを所定の位置に展開(テキストコピー/貼り付け)するだけなので、int limits = MAX (4,8)文字通りに展開されint limits = (4 > 8 ? 4 : 8)ます。と書くMAX(x,++y)と、次のように展開されるため、が以上のy場合は2回インクリメントされます。yxint limits = (x > ++y ? x : ++y)

于 2012-07-29T16:20:58.153 に答える
0

通常、MAX()またはMIN()マクロを使用して、変数のペア、変数と定数、またはマクロ定数のペアまたはその他の非リテラル定数式のいずれか高い方/低い方を取得します。 。通常、質問で行ったように2つのリテラル定数を指定することはありません。

于 2012-07-29T16:11:10.700 に答える
-1

maxのアルゴリズム(Objective-C)

 // get max value
- (float)maxValue:(NSArray *)arrValue
{
    float maxValue = 0.0;
    for (NSString *value in arrValue) {
        float compareValue = [value floatValue];

        if (compareValue > maxValue) {
            maxValue = compareValue;
        }

    }

    return maxValue;
}


NSArray *number=[NSArray arrayWithObjects:[NSNumber numberWithFloat:57.02], [NSNumber numberWithFloat:55.02], [NSNumber numberWithFloat:45.02], nil];

NSLog(@"%f", [self maxValue:number]);

result 57.020000
于 2015-04-08T07:19:34.087 に答える