以下C11程序是否形成错误?
struct a { struct b { }; void f() {}; }; extern struct a b; struct a ::b; int main() { b.f(); }
为什么不为甚么
这里感兴趣的是这一行:
struct a ::b;
这是内部类的前向声明a :: b?
或者这是全局变量b的定义?相当于:
struct a (::b);
解决方法
struct a :: b;没有声明一个名为b的类型为a的变量,如果这是您要求的.这是嵌套类型a :: b的(冗余)前向声明.空白在C程序中通常并不重要.所以你的程序声明,但从来没有定义一个名为b的变量.这违反了一个定义规则:程序因此是不正确的,链接器会告诉你一样多.