「0xe-0xeはゼロという迷信」は本当なの?

[迷信] 0xe-0xe はゼロ | 株式会社きじねこ

単に GCC のバグじゃないのかなー。そもそも、

  • 手元の規格 *1 だと、pp-number に 'x' は含まれない
    • だから '0xe-0xe' は pp-number として評価されないはず
  • BNF を見ると pp-number は #if とかプリプロセッサディレクティブ内にしか出現しない
    • だから if 文の中にある '0xe-0xe' は pp-number じゃない

んじゃないか。実際に、gcc -E - することで、プリプロセッサがエラーを吐いているわけじゃないことがわかる。そして '0x' から始まるのは hexadecimal-literal で指数表現はできないことになってる。

それに、tcc で試したら、ちゃんとコンパイルとおった。

結論:gcc のバグだと思う。

*1:C++ のドラフト(2521