C-Struct具有太多的初始化值

时间:2016-02-05 21:36:58

标签: c gcc struct rectangles initializer

我有来自其他网站的代码:

typedef struct {
  byte x, y;
} Point;

typedef struct {
  Point topLeft;   /* top left point of rectangle */
  Point botRight;  /* bottom right point of rectangle */
} Rectangle;

byte rectanglesOverlap(Rectangle *Rectangle1, Rectangle *Rectangle2) {
  // If one rectangle is on left side of other
  if (Rectangle1->topLeft.x > Rectangle2->botRight.x || Rectangle2->topLeft.x > Rectangle1->botRight.x)
    return 0;

  // If one rectangle is above other
  if (Rectangle1->topLeft.y < Rectangle2->botRight.y || Rectangle2->topLeft.y < Rectangle1->botRight.y)
    return 0;

  return 1;
}

我的印象是

Rectangle *thisR = {{x, y}, {x+width, y+height}},
        *oldR = {{x2, y2}, {x2+width2, y2+height2}};

可以使用。 它编译得很好,但重叠检查总是返回false(意思是,它返回就好像它们从不重叠,即使它们这样做) 所以切换到Visual Studio,我得到了第二点的大括号

的错误
{{x, y}, {
         ^

说我有&#34;太多的初始化值&#34; 为什么这只是Visual Studio中出现的错误,而不是GCC,它可以解释为什么重叠代码对我不起作用?几天来我一直在寻找这个问题的答案:

1 个答案:

答案 0 :(得分:1)

OP尝试使用以下内容错误地初始化指针  @kaylum

Rectangle *thisR = {{x, y}, {x+width, y+height}},
          *oldR  = {{x2, y2}, {x2+width2, y2+height2}};

使用C11,如果代码需要在等式或赋值的中间生成Rectangle *,则可以使用复合文字

Rectangle *thisR = &( (Rectangle) {{x, y}, {x+width, y+height}});

怀疑如果这适用于Visual Studio

否则使用旧式的方式。

Rectangle tmpR = {{x, y}, {x+width, y+height}};
Rectangle *thisR = &tmpR;