# определить константу
Допустим, у меня есть структура:
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 ответа
Я видел много ошибок в вашем коде.
#DEFINE
- нет такого препроцессора (используйте#define
)- Вы не можете сравнивать структурные переменные, используя
==
оператор - Там нет названия для вашей структуры.
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 *);