假设我有一个结构:
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')
答案 0 :(得分:5)
您无法将结构与==
进行比较。
答案 1 :(得分:5)
我在你的代码中发现了很多错误。
#DEFINE
- 没有这样的预处理器(使用#define
)==
运算符location
是结构变量,而不是结构名称。所以你不能使用struct location my_loc
答案 2 :(得分:2)
您无法按照提到的方式比较struct。将代码修改为如下所述。
struct location my_loc = { 2, 3 };
if ((my_loc.x == INVALID_LOCATION.INT_MAX) && (my_loc.y == INVALID_LOCATION.INT_MAX))
{
return false;
}
答案 3 :(得分: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 *);