1. ホーム
  2. c

[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する

2022-02-07 04:11:54

質問

以下のコードをコンパイルしようとすると、次のような警告が表示されます。

warning: suggest parentheses around assignment used as truth value

なぜこうなるのか?これは割とよくあるイディオムだと思います。私のコードでもさっきのようなものを使っています。

struct PIDList* 
getRecordForPID(struct PIDList* list, pid_t pid) {
    while(list = list->next)
        if (list->pid == pid)
            return list;

    return NULL;
}

解決方法は?

明示的であること - そうすれば、コンパイラはあなたが間違いを犯したかもしれないと警告することはありません。

while ( (list = list->next) != NULL )

または

while ( (list = list->next) )

いつか、コンパイラが教えてくれたことを嬉しく思う日が来るだろう、みんな する そのような間違いはありません;)