【发布时间】:2017-01-08 10:49:27
【问题描述】:
这不适用于foo
struct Foo;
typedef struct
{
int x;
}
Bar;
void foo (Foo *); // unknown type name ‘Foo’
void bar (Bar *);
typedef struct
{
int y;
}
Foo;
这不适用于bar
struct Foo;
typedef struct
{
int x;
}
Bar;
void foo (struct Foo *);
void bar (struct Bar *); ‘struct Bar’ declared inside parameter list
typedef struct
{
int y;
}
Foo;
我的一些结构必须是前向声明的,因为它们是作为指针传递的,而其中一些必须不是前向声明的,因为它们是作为值传递的。
有没有一种方法可以在 C 中声明类型,以便所有函数原型始终以相同的方式引用自定义类型,无论它们是否被前向声明?
【问题讨论】:
-
在你的例子中没有
struct Foo。有一个没有标签的结构,你 typedef 为Foo。 -
C 不是 C++....
-
为了减少噪音并以此减少混乱,只需删除所有
typedefs。typedefs 根本不需要来让事情顺利进行。 -
类型定义不是前向声明结构的定义。这是完全不同的事情。
-
在任何地方使用
struct Foo和struct Bar,如void bar (struct Bar *),可以消除这个问题。
标签: c struct typedef forward-declaration function-prototypes