0

以下のようにリーダー/ライター スピンロックを使用すると、奇妙なコンパイラ警告が表示されます。

acで定義

struct rwloct_t  rwspinlock.
rwlock_init(&rwspinlock);

宣言してbcで使用する

extern struct rwloct_t  rwspinlock

したがって、bcでは、ロックまたはロック解除を呼び出すたびに、たとえば. 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サフィックス)として定義されていますか?

その場合、構造体を再度使用する必要はありません。

rwloct_t rwspinlock;

extern rwloct_t rwspinlock;

なぜそれは動作し、動作.hしないの.cですか? わかりませんが、gccと オプションの両方をプリコンパイルして-E、違いがあるかどうかを確認してみてください。そうでない場合は、コンパイラの内部的な理由だと思います。

于 2013-10-24T17:00:49.910 に答える