免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11995 | 回复: 8
打印 上一主题 下一主题

typedef struct cpu_set_t ; 这个怎么理解呀? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-09 10:42 |只看该作者 |倒序浏览
我经常碰到类似的句子,怎么都理解不了。今天又看到一个是在头文件里的。大体如下:
#define _GNU_SOURCE
#include <sched.h>
typedef struct cpu_set_t ;
size_t CPU_SETSIZE ;

void CPU_SET(unsigned long cpu , cpu_set_t *set);
void CPU_CLR(unsigned long cpu , cpu_set_t *set);
....................
(就是很多类似的函数声明)

int sched_setaffinity(pid_t pid , size_t setsize , const cpu_set_t *set);
..........................


这里的typedef struct cpu_set_t ;到底是起个什么作用,我怎么从来没见过呢?请高手稍微详细地解释下,我实在是困扰了好多天了,书上看不到这样的句子解释。

论坛徽章:
0
2 [报告]
发表于 2010-06-09 12:23 |只看该作者
也不是清楚啊,帮你顶一下了

论坛徽章:
0
3 [报告]
发表于 2010-06-09 12:34 |只看该作者
回复 1# wohenry84

我的理解,这个跟直接struct a;来声明一下结构类型a的功能是一样的。就是声明一下这个typedef的cpu_set_t类型

论坛徽章:
0
4 [报告]
发表于 2010-06-09 12:43 |只看该作者
本帖最后由 lyreopera 于 2010-06-09 12:46 编辑

这是一个不完整的声明,告诉编译器有struct cpu_set_t 这么一个类型。


一个常用的地方是:假如A、B两个结构互相包含对方的指针:

typedef struct A;
typedef struct B;

struct A
{
    struct B *ptr;
    /* other stuff */
};

struct B
{
    struct A *ptr;
    /* other stuff */
};

另一个作用是信息隐藏,我在gdsl里面学来的

/* type.h */
typedef struct _type Type;

void type_XXX (Type *type);
/* ... */




/* type.c */
#include "type.h"

struct _type
{
    /* ... */
};

论坛徽章:
0
5 [报告]
发表于 2010-06-09 12:53 |只看该作者
4l正解

是不是linux才能这么写
hp上不能

declaration requires a typedef name

论坛徽章:
0
6 [报告]
发表于 2010-06-09 13:26 |只看该作者
这是定义了这个一个类型而已,

我的体会是在以后定义结构体的时候方便了很多,不用再加上struct了,呵呵

论坛徽章:
0
7 [报告]
发表于 2010-06-09 13:34 |只看该作者
那这个句子是不是具有跨文件的可见性呢?
我的意思就是说,如果在这个文件没有定义,但是就只有这个typedef struct cpu_set_t ;
下面也可以用cpu_set_t 这个类型来定义别的变量呀?我们不是常见这样的都是采用extern来声明吗?

论坛徽章:
0
8 [报告]
发表于 2010-06-09 13:50 |只看该作者
cpu_set_t 具体化为一种struct  可以理解为定义变量的时候把struct换成cpu_set_t就行了

论坛徽章:
0
9 [报告]
发表于 2010-06-10 11:48 |只看该作者
楼上的好像都说明了,呵呵
我用到的地方也是,隐藏c,cpp文件里的真实类型实现,h文件里用到的只是指针。
还有一个是可以省略struct :)
另外 extern 是引用 外部对象 吧,用处和声明类型不同
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP