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)