prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 11.5

Q为什么声明

extern int f(struct x *p);
会在参数列表中给出关于“struct x 已声明”的晦涩警告消息?


A在 C 的正常块作用域规则的一个怪癖中,在原型中首次声明(甚至提及)的结构不能与同一源文件中声明的其他结构兼容。(问题在于结构和标签在原型结束时超出作用域;请参阅问题 1.29。)

要解决这个问题,您应该重新安排事物,以便结构的实际声明先于使用它的函数原型。 (通常,原型和结构声明都会放在同一个头文件中,这样它们就可以相互引用。)如果您必须在原型中提及一个以前未见的结构,请在原型之前加上看起来空洞的声明

	struct x;
这会在文件作用域中放置一个(不完整的)声明struct x,以便所有后续涉及struct x的声明至少可以确定它们引用的是同一个struct x.

参考:ISO Sec. 6.1.2.1, Sec. 6.1.2.6, Sec. 6.5.2.3


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管