C 言語を再定義しようとすることは、常に非常に悪い考えです。マクロを使用して演算子を置き換えると、他の C プログラマーがコードを読めなくなります。
&& が誤って & になってしまうことについては、問題があるとは思えません。少なくとも、その問題に遭遇したことはありません。標準 C には代替論理演算子が既にあります。どちらかといえば、それらを使用する必要があります。
ヘッダー<iso646.h>
は、対応するトークン (右側) に展開される次の 11 個のマクロ (左側) を定義します。
and &&
and_eq &=
bitand &
bitor |
compl ~
not !
not_eq !=
or ||
or_eq |=
xor ^
xor_eq ^=
== が危険であるという考えは、ひどく時代遅れの考えです。80 年代、混乱したプログラマーは、「比較を行うときは常にリテラルを変数の前に置く」、つまりif (0 == var)
.
これに関連するバグを回避する正しい方法は、条件内での代入を避けることです。それを良いコーディング スタイルとして採用すれば、そのようなバグを回避するのは簡単です。1990 年に Turbo C がリリースされて以来、それらを見つけることは問題ではありませんでした。それ以来、ほとんどすべてのコンパイラは、if ステートメント内で代入を行ったときに、「誤った代入の可能性」について警告することができました。
現代のプログラミングでは、すべてのプロのプログラマーが静的アナライザー ツールを使用して、あらゆる種類のコンパイル時のバグを見つけます。何らかの理由でコンパイラがこのバグを検出できない場合、静的アナライザは確実に検出します。
したがって、あなたの質問に答えるには:はい、それは乱雑であり、コードがエラーを起こしやすくなり、読みにくくなります。