-1

クラスのプロジェクトに取り組んでいて、使用するはずのこのコードに出くわしました。

「LT」演算子とは何ですか? 私はそれがある種のより少ないデバイスであると仮定していますが、私は以前にCでこのようなものを見たことがなく(私は新しいです)、私のコンパイラはそれが未定義であると私に言い続けています.

int indexSmallest (struct dyArray * v, int i, int j) { 
    /* return index of smallest element */
    if (LT(dyArrayGet(v, i), dyArrayGet(v, j)) 
        return i;
    return j;
}

(compare(x, y) == -1)これを回避するためにできることはわかっていますが、与えられたコードをそのままにしておきたいと思いました。

4

2 に答える 2

4

すでに述べたように、LTこれはCの標準的な部分ではありません。おそらくマクロであり、示されているコードを使用することが期待される場合は、おそらくヘッダーでマクロの定義を指定する必要があります。

dyArrayGet()によって返される型が数値型であると仮定すると、その実装の可能性は次のようになります。

#define LT(lhs, rhs)  ((lhs) < (rhs))

私はそれがこのシナリオで何らかの利益になるとは確信していません。文字列を比較するための値を提供する場合があります。定義は次のとおりです。

#define LT(lhs, rhs)  (strcmp(lhs, rhs) < 0)

dyArrayGet()それはすべて、関数が何を返すかに依存します。

于 2013-02-24T22:41:18.473 に答える
2

LT はオペレーターではありません。if (a) 構文に慣れていないので、演算子だと思っているのではないでしょうか。これらのコード スニペットは同等です。

int i = 5;
if (i != 0)
  foo();

int i = 5;
if (i)
  foo();

LT は関数またはマクロである可能性があります。

于 2013-02-24T22:34:53.797 に答える