0

私が構造体を持っているとしましょう:

struct location
{
     int x;
     int y;
};

次に、後でプログラムで使用する無効な場所を定義したいと思います。

#define INVALID_LOCATION (struct location){INT_MAX,INT_MAX}

ただし、プログラムでそれを使用すると、エラーになります。

struct location my_loc = { 2, 3 };
if (my_loc == INVALID_LOCATION)
{
     return false;
}

これはコンパイルされません。そのように複合リテラルを使用することは合法ではありませんか? エラーが発生します:

バイナリ式のオペランドが無効です ('struct location' および 'struct location')

4

4 に答える 4

5

あなたのコードに多くのエラーがありました。

  1. #DEFINE- このようなプリプロセッサはありません (を使用#define)
  2. ==演算子を使用して構造変数を比較することはできません
  3. あなたの構造に名前はありません。location構造体の名前ではなく、構造体変数です。だから使えないstruct location my_loc
于 2013-06-26T10:54:12.623 に答える
5

と等しいか構造を比較することはできません==

于 2013-06-26T10:51:59.257 に答える
2

あなたが言及した方法で構造体を比較することはできません。コードを次のように変更します。

    struct location my_loc = { 2, 3 };
    if ((my_loc.x == INVALID_LOCATION.INT_MAX) && (my_loc.y == INVALID_LOCATION.INT_MAX))
    {
         return false;
    }
于 2013-06-26T11:26:00.967 に答える
1

マクロとそのパラメータにはスペースを入れないでください。

#define INVALID_LOCATION(location) { INT_MAX, INT_MAX }

コンパイルされません (エラー: バイナリ == に対する無効なオペランドまたはエラー: '{' トークンの前に式が必要です)

C++ を使用している場合は、== 演算子をオーバーロードできます。

C では、次のような関数を定義できます。

int EqualLocation (const struct location *, const struct location *);

比較のために。

この関数を使用して、実装できます

int IsInValid location(const struct location *);
于 2013-06-26T10:56:09.007 に答える