2013-12-07 15 views
7

にゼロを追加し、私は非常に独特のラインに気づい:はCプリプロセッサ文の

#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L 

奇妙な部分が+ 0です。ゼロは加法的な同一性です。さまざまな数学が書いているのは、noopです。

上記のプリプロセッサステートメントにゼロを追加する目的は何ですか?私はそこにall sorts of weird preprocessor magicがあることを知っていますが、これはばかばかしいようです。

答えて

12

__STDC_VERSION__が空のトークン (たとえば、#define __STDC_VERSION__)と定義されている場合、プリプロセッサー構文エラーを回避できます。

(私の答えの最初のバージョンが間違っていたことを指摘してくれたJens Gustedtに感謝します)

+1

完全には正しくありません。プリプロセッサ評価のルールは未定義の識別子トークンが0と評価されているため、定義されていなければ問題ありません。これが重要なのは、それが定義されるときであるが、空のトークンになる場合である。 –

+0

@ JensGustedt:正しいですが、私はちょうどいくつかのテストコードで自分の答えを検証しようとしましたが、正しくないことに気付きました。私はそれが今正しいことを願っています。 –

+0

ツイスト。トークンが空白の場合、+記号は単項演算子として解釈されると思います。 – ApproachingDarknessFish

関連する問題