Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760161
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: LINUX

2007-12-28 23:53:14

在kernel代码中,经常出现struct A;这种类型的代码,例如:
include/net/sock.h中
struct sock;
struct sock
{
......
};

刚开始看的时候,总是不理解为什么要这么搞。写了一个测试程序:

#include

struct A; //声明
//定义B
struct B
{
        struct A *a; //注意这边是一个指针
};
//定义A
struct A
{
        struct B b;
};

void c(struct A* d);
/*
 * 如果struct B中的是struct A a;而不是指针的话,会出现下面的问题:
 * sizeof(A)依赖于sizeof(B),而sizeof(B)又依赖于sizeof(A);出现循环依赖问题.
 * 如果struct B中使用的是指针的话,就没有这个问题了.
 * 注:语法没有问题,但是语意有错误.
 * */

int main()
{
        struct A e;
        return 0;
}


struct A;
只不过是一个声明而已,不过上面的测试程序还发现了另外一个有趣的问题 :)

阅读(2368) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-01-23 15:29:23

-_-U 声明就是提前决议嘛~~哪有什么难的~~ 另外,int main()和int main(void)不一样, 在C中.

chinaunix网友2008-01-23 15:29:23

-_-U 声明就是提前决议嘛~~哪有什么难的~~ 另外,int main()和int main(void)不一样, 在C中.