linux内核源码中的结构体中的宏定义怎么理解?

比如,读写信号量结构体

struct rw_semaphore {
        long                        count;
#define RWSEM_UNLOCKED_VALUE                0x0000000000000000L
#define RWSEM_ACTIVE_BIAS                0x0000000000000001L
#define RWSEM_ACTIVE_MASK                0x00000000ffffffffL
#define RWSEM_WAITING_BIAS                (-0x0000000100000000L)
#define RWSEM_ACTIVE_READ_BIAS                RWSEM_ACTIVE_BIAS
#define RWSEM_ACTIVE_WRITE_BIAS                (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
        spinlock_t                wait_lock;
        struct list_head        wait_list;
};

结构体中的 #define  语句有什么用???是GNU扩张语法吗?

作者: shaohui973   发布时间: 2011-02-18

Define只是define而已,这段deinfe的意思是count可以根据不同的用处初始化成为以下的值

作者: longzhang   发布时间: 2011-02-18

我也不明白为什么要把define 放结构体里,一直只以为是为了使结构清晰容易理解

作者: amarant   发布时间: 2011-02-18



QUOTE:
一直只以为是为了使结构清晰容易理解
amarant 发表于 2011-02-18 15:21



我也是这么认为的,找到struct定义就能知道里面到底是什么了

作者: longzhang   发布时间: 2011-02-18

因为这些宏定义只是这个结构体某些成员使用的,就近定义,可以更方便对照,其作用更加明确。

作者: Godbach   发布时间: 2011-02-18

回复 Godbach


    可以具体讲讲吗?

作者: shaohui973   发布时间: 2011-02-18

回复 longzhang


    没明白。这只是一个结构体的声明,又没定义变量。

作者: shaohui973   发布时间: 2011-02-18



QUOTE:
回复  longzhang


    没明白。这只是一个结构体的声明,又没定义变量。
shaohui973 发表于 2011-02-18 15:52




    那只是几个宏定义,你随便放哪都是一样的效果。
    放结构体唯一的目的就是与使用它的变量靠近点。
    不是什么C语言的扩展!!

作者: mekinglong   发布时间: 2011-02-18