「!strcmp」

リンク元をみたら「!strcmp」というクエリでここにたどり着いた方がいました。残念ながらその方の期待には応えられなかったのですが、「!strcmp」については一言言っておこうかなと。strcmp() は 3 つの状態を表す結果を返すので、プレディケイトではないのに、真偽値に対して使うことが想定されている論理否定演算子を使うのは意味的にどうなのよ。と。

CodeSearch したら約337,000件あった。

似たような問題で

void *ptr = ...;

if (ptr) { /* (1) */
  do_some();
}

if (ptr != 0) { /* (2) */
  do_some();
}

if (ptr != NULL) { /* (3) */
  do_some();
}

どれがお好みでしょうか。