# определить константу

Допустим, у меня есть структура:

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 ответа

Решение

Вы не можете сравнить структуры на равенство с ==,

Я видел много ошибок в вашем коде.

  1. #DEFINE - нет такого препроцессора (используйте #define)
  2. Вы не можете сравнивать структурные переменные, используя == оператор
  3. Там нет названия для вашей структуры. location является структурной переменной, а не именем структуры. Так что вы не можете использовать struct location my_loc

Вы не можете сравнить структуру так, как вы упомянули. Измените код так, как указано ниже.

    struct location my_loc = { 2, 3 };
    if ((my_loc.x == INVALID_LOCATION.INT_MAX) && (my_loc.y == INVALID_LOCATION.INT_MAX))
    {
         return false;
    }

Пожалуйста, не ставьте пробелы с макросом и его параметром.

#define INVALID_LOCATION(location) { INT_MAX, INT_MAX }

Он не будет компилироваться (с ошибкой: недопустимые операнды в двоичном == или с ошибкой: ожидаемое выражение перед маркером '{')

Если вы находитесь в C++, то вы можете перегрузить оператор ==.

В C вы можете определить функцию, такую ​​как

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

для сравнения.

Используя эту функцию, вы можете реализовать

int IsInValid location(const struct location *);
Другие вопросы по тегам