当我使用下面的读写器螺旋锁时,我收到一个奇怪的编译器警告
在a.c中定义
struct rwloct_t rwspinlock.
rwlock_init(&rwspinlock);
在b.c中使用声明
extern struct rwloct_t rwspinlock
所以,在 b.c 每当我调用锁定或解锁时,例如。read_rwlock(&rwspinlock)
我都会收到以下警告。
warning: passing argument 1 of ‘_raw_read_lock_bh’ from incompatible pointer type
/home/dev/data/linux/linux/include/linux/rwlock_api_smp.h:20: note: expected ‘struct rwlock_t *’ but argument is of type ‘struct rwlock_t *’
然后,我改变如下, 在a.c
中定义struct rwloct_t rwspinlock.
rwlock_init(&rwspinlock);
在a.h中声明
extern struct rwloct_t rwspinlock
包含在b.c中,
#include "a.h"
现在没有编译警告。但是,我不清楚如何! 任何人都能解释一下,究竟发生了什么?
答案 0 :(得分:1)
也许您的rwloct_t
已定义为typedef
)作为结构(此处为_t
后缀)?
如果是这样,您不需要再次使用struct:
rwloct_t rwspinlock;
extern rwloct_t rwspinlock;
为什么它在.h
而非.c
内有效?我不知道,但是您可以尝试使用gcc
和选项-E
进行预编译,看看是否存在一些差异,否则我猜是编译器的内部原因。