2

在这里引用内核代码时,struct page;定义为没有成员(我猜这不是前向声明)。

但是这篇文章中接受的答案说这是不允许的。

然后我尝试了一个样本,

#include <stdio.h>

struct page;

struct arm_vmregion 
{
   unsigned long           vm_start;
   unsigned long           vm_end;
   struct page             *vm_pages;
   int                     vm_active;
   const void              *caller;
};

int main()
{
   struct arm_vmregion aa;
   return 0;
}

它编译成功

empty_struct.c: In function ‘main’:
empty_struct.c:15:22: warning: unused variable ‘aa’ [-Wunused-variable]

请在这方面澄清我。

4

2 回答 2

8

空结构与前向声明不同 - 空结构将带有大括号,并且不合法。前向声明当然没问题。

struct foo;    // forward declaration - OK

struct bar {   // empty struct - invalid
};
于 2013-06-27T05:58:48.763 回答
0

它是一个前向 decl,这里是它的定义:

http://lxr.free-electrons.com/source/include/linux/mm_types.h?v=3.4

于 2013-06-27T05:57:53.180 回答