【发布时间】:2018-11-06 12:27:50
【问题描述】:
我正在尝试编译一些包含 C 和 C++ 混合的旧代码。我发现了以下语法:
extern struct Edge;
typedef struct Edge
{
...
Edge* edges;
...
} Edge;
当我尝试使用 GCC 编译时出现错误:
a storage class can only be specified for objects and functions
extern struct Edge;
删除 extern 后,它会编译。我可能弄错了,但在我看来它确实像 Edge 的前向声明,但为什么 struct 的前面有一个 extern 关键字?
【问题讨论】:
-
struct Edge* edges;- 代码随后编译为 C,但带有警告。 -
extern struct Edge;行是外部声明的开始,但它不包含“声明符”——没有实际对象的名称。因此,正如消息所示,这是毫无意义的。删除它是安全的;据我所知,这从来都不是必要的(甚至是有益的),而且现在肯定既不是必要的也不是有益的。