本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

C/C++で0xf+1は合法なのに0xe+1はコンパイルエラーになるのはなんで?

以下のコードはwell-formedである。

int x = 0xf+1 ;

以下のコードはill-formedである。

int x = 0xe+1 ;

何故か。

理由は、0xf+1は、0xf, +, 1という3つのトークンとして認識されるが、0xe+1は、一つのpp-numberトークンとして認識されるためだ。これには、浮動小数点数リテラルの指数の文法が影響している。

具体的には、"数値 e 符号"という組み合わせの文字列が引っかかる。

そのため、16進数のeに1を加えた数を表現する場合は、eと+の間に空白を開けなければならない

int x = 0xe +1 ;

-の場合も同様。

ドワンゴ広告

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0