0

当我使用如下的读写器自旋锁时,我收到一个奇怪的编译器警告,

在交流中定义

struct rwloct_t  rwspinlock.
rwlock_init(&rwspinlock);

通过声明在 bc 中使用

extern struct rwloct_t  rwspinlock

所以,在公元前每当我调用锁定或解锁时,例如。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 *’

然后,我更改如下, 在 ac 中定义

struct rwloct_t  rwspinlock.
rwlock_init(&rwspinlock);

宣布在啊

 extern struct rwloct_t  rwspinlock

包括在 bc 中,

#include "a.h"

现在没有编译警告。但是,我不清楚如何!谁能解释一下,到底发生了什么?

4

1 回答 1

1

也许您rwloct_t已经将 ( typedef) 定义为结构(这里是_t后缀)?

如果是这样,您不需要再次使用 struct :

rwloct_t rwspinlock;

extern rwloct_t rwspinlock;

为什么它在内部起作用.h而不在内部起作用.c?我不知道,但是您可以尝试使用gcc和 选项进行预编译-E,看看是否有一些区别,否则我猜是编译器内部的一些原因。

于 2013-10-24T17:00:49.910 回答