可以多次定义 C 结构吗?

标签 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;
}

嗯:

struct bar {
  int a;
  int b;
};

b.h:

#include "a.h"

struct buz {
  int x;
  int y;
};

如果我运行 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

我知道我没有放置任何包含守卫,它们会修复编译错误,但我的理解是这应该仍然有效。我还在 foo.c 中尝试了两个 struct bar 定义,我得到了相同的错误消息?那么,结构体能否在 C 中定义多次?

最佳答案

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

    struct bar;
    struct bar{};
    struct bar;

编译得很好,因为 bar 只定义一次,声明次数不限。

关于可以多次定义 C 结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10075080/

相关文章:

c - Linux中C语言中Printf()在 "while(1)"循环之前不执行

c++ - 双插槽与单插槽内存模型?

java - 套接字编程 : accept() delayed

c - C 编译器如何为位域定义的结构分配结构内存?

ios - 在 Swift 3 的 Struct 中附加一个值

c++ - 引用结构大小的更好方法(#pragma pack VS 定义的大小)

c - 在 OSX Yosemite 上将 cc 设置为 gcc 而不是 clang

c - 在萨尔萨舞20中寻找

c - 结构赋值中的不兼容类型

c - 我应该如何为一个队列或堆栈使用两个 C 结构?