最速怪談選手権

Linuxカーネルの記述の中で、関数定義で、下記の__acquires(rq->lock)のように
ブラケット{}の外側に命令を書いた場合、どう言った扱いになるのでしょうか?


static inline runqueue_t *task_rq_lock(task_t *p, unsigned long *flags)
__acquires(rq->lock)
{
struct runqueue *rq;

repeat_lock_task:
local_irq_save(*flags);
rq = task_rq(p);
spin_lock(&rq->lock);
if (unlikely(rq != task_rq(p))) {
spin_unlock_irqrestore(&rq->lock, *flags);
goto repeat_lock_task;
}
return rq;
}

質問者からの補足コメント

  • #define __acquire(x) __context__(1)
    となっています。
    コンテキスト1に切り替えています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/01/24 07:12

A 回答 (2件)

https://oshiete.goo.ne.jp/qa/12165555.html
で答えたようにC用のコードチェッカの記述のようです。
それでC言語仕様で関数定義のブランケットの前に書けるのはK&R世代の変数宣言くらいしか記憶にないので、gccの拡張機能か、あるいは別のヘッダーファイル・コマンドライン引数なんかで__context__(x)を空白など無害なものに置き換えるマクロを使っているのではないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2021/01/25 15:40

「命令」ってなんですか?

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!