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

これは forward decl です。定義されている場所は次のとおりです。

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

于 2013-06-27T05:57:53.180 に答える