【发布时间】:2017-12-25 07:09:20
【问题描述】:
我有 3 个文件:main.c、def.c、def.h。两个.c 文件都包含def.h。
所有文件都在同一个目录中。
我的编译器是 gcc 版本 4.9.2。
在 def.h 中:
struct _info {
int a;
};
在 def.c 中:
#include "def.h"
struct _info info[] = {};
在 main.c 中:
#include "def.h"
extern struct _info info[];
当我将def.c 构建为目标文件,然后使用main.c 构建时,例如:
gcc -c def.c
gcc main.c def.o
我收到一条错误消息:数组类型的元素类型不完整
如果我使用typedef 将struct _info 定义为INFO 就像:
typedef struct _info INFO;
并在.c 文件中将struct _info 替换为INFO。
编译好了。
但是为什么和做什么 typedef 做什么?
【问题讨论】:
-
无法复制。听起来像一个编译器错误。您的编译器及其版本是什么?
-
无法重现。你是怎么编译的?
-
只是询问所有文件是否在同一路径中
-
请注意,全局或标签命名空间中以
_开头的标识符由实现保留。避免这些。 -
@StoryTeller 是的,谢谢。这只是一个例子。