12.6 为什么声明  extern int f(struct x *p);  报出了一个奇怪的警告信息 ``结构 x 在参数列表中声明"?

与 C 语言通常的作用范围规则大相径庭的是, 在原型中第一次声明 (甚至提到)  的结构不能和同一源文件中的其它结构兼容, 它在原型的结束出就超出了作用范围。

要解决这个问题, 在同一源文件的原型之前放上这样的声明:

    struct x;
它在文件范围内提供了一个不完整的结构 x 的声明, 这样, 后续的用到结构 x  的声明至少能够确定它们引用的是同一个结构 x。

参考资料: [ISO, Sec. 6.1.2.1, Sec. 6.1.2.6, Sec. 6.5.2.3]。

翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)