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扩张语法吗?
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
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
没明白。这只是一个结构体的声明,又没定义变量。
shaohui973 发表于 2011-02-18 15:52
那只是几个宏定义,你随便放哪都是一样的效果。
放结构体唯一的目的就是与使用它的变量靠近点。
不是什么C语言的扩展!!
作者: mekinglong 发布时间: 2011-02-18