【发布时间】:2017-11-10 19:09:08
【问题描述】:
我正在研究第 3 方代码库,发现将类型声明为指向未定义结构的指针显然是有效的。作为一个最小的工作示例,考虑一个 C 文件 test.c,它只包含:
typedef struct foo *bar;
让我吃惊的是,这个文件使用命令编译没有任何问题
gcc test.c -shared
为什么编译器不会抱怨没有在任何地方声明 struct foo?
我的环境是 Ubuntu 16.04 和 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609。
【问题讨论】:
-
它不是“未定义的结构”,它是一个指向不完整类型的指针。