#define一个常量结构

时间:2013-06-26 10:44:45

标签: c compound-literals

假设我有一个结构:

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 个答案:

答案 0 :(得分:5)

您无法将结构与==进行比较。

答案 1 :(得分:5)

我在你的代码中发现了很多错误。

  1. #DEFINE - 没有这样的预处理器(使用#define
  2. 您无法使用==运算符
  3. 比较结构变量
  4. 您的结构没有名称。 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 *);