可以多次定义C结构吗?

Ele*_*ito 9 c struct

我已经在几个地方读过可以安全地多次定义C结构,但是我从gcc中获得了"重新定义结构"错误,用于多次定义结构(通过多个包含).一个非常简单的示例如下所示:

foo.c的:

#include "a.h"
#include "b.h"

int main(int argc, char *argv[]) {
  struct bar b;
  b.a = 2;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

啊:

struct bar {
  int a;
  int b;
};
Run Code Online (Sandbox Code Playgroud)

BH:

#include "a.h"

struct buz {
  int x;
  int y;
};
Run Code Online (Sandbox Code Playgroud)

如果我跑,gcc foo.c我得到:

In file included from b.h:1:0,
                 from foo.c:2:
a.h:1:8: error: redefinition of ‘struct bar’
a.h:1:8: note: originally defined here
Run Code Online (Sandbox Code Playgroud)

我知道我没有放任何包含警卫,那些将修复编译错误,但我的理解是,这应该工作.我也在struct barfoo.c中尝试了两个定义,我得到了相同的错误消息?那么,结构是否可以在C中定义多次?

Sir*_*Guy 12

C中的结构可以安全地多次声明,但只能定义一次.

    struct bar;
    struct bar{};
    struct bar;
Run Code Online (Sandbox Code Playgroud)

编译很好,因为bar只定义一次并按你喜欢的次数声明.

  • 非常正确的例子,OP的好例子:) (2认同)