関係演算子
C言語から直接または間接的に派生したプログラミング言語では、同値関係の関係演算子として、直感的な = ではなく == を用いる。一方、= を用いる言語としては Pascal、BASIC、Ada、Standard ML、Objective Caml、SQL、VHDL などがある。
C言語は広範囲に普及したため、後発のプログラミング言語における構文や仕様はC言語のそれを参考に定義されたものも多いが、そのうちの一つがこの == 演算子である。この独特の構文は、B言語開発の初期の段階で = を別の意味に割り当てたことに端を発する。ALGOLとFORTRANの流れを汲むB言語の設計者は、タイピングを減らしたいという要望から、頻繁に記述される更新・代入操作のためのコピー演算子として = を代用することを決定した(これは A = A + 1 のような、一見して「数学的には不成立」な式が許容されることを意味する)。代わりに、= が本来担う役割である等号として == が使われることとなった。C言語はこれらの演算子をそのまま引き継ぎ、以後JavaやC#をはじめとする多くの言語がこの構文を採用したのである。
これらのC言語ファミリーにおける = の用法はバグの温床になりうる。C言語にはブーリアン型がなく、if文やwhile文の条件式には真偽値に評価されうる任意の数値型の式を受け付ける(ゼロあるいはゼロ相当を偽、非ゼロを真とする)。またC言語における代入は文ではなく式であり値を持つ。そのため、プログラマーが if (x == y) の代わりに、if (x = y) とミスタイプしても構文的には合法となってしまうのである。