|
2**p とか書いても2かける*pの意味になるのですか?
なります。
コンパイラは,まず,2**pを次のようにトークンに分割します。
- 定数
- 2
- 区切り子
- *
- 区切り子
- *
- 識別子
- p
そして,次のように解析されます。
・expression
・assignment-expression
・conditional-expression
・logical-OR-expression
・logical-AND-expresssion
・inclusive-OR-expression
・exclusive-OR-expression
・AND-expression
・equality-expression
・relational-expression
・shift-expression
・additive-expression
・multiplicative-expression
・multiplicative-expression
・cast-expression
・unary-expression
・postfix-expression
・primary-expression
・constant(2)
・cast-expression
・unary-expression
・unary-operator(*)
・unary-expression
・postfix-expression
・primary-expression
・primary-expression
・identifier(p)
解析時に,unary-expressionよりも先にmultiplicative-expressionが処理されます。
故に,2**pは2 * (*p)と処理されます。
この解析順序をわかりやすく表にしたのが,演算子の優先順位表です。
3/*p とか書いても大丈夫ですか?
コメントの入れ子に対応したコンパイラで困りそうですが。
大丈夫とは?
/*から先はコメントとしてtranslation phase 3で処理されます。
3 / *p のように書けば絶対に大丈夫ですか?
3, /, *, pとトークンに分割されますから,コメントと見なされることは絶対にありえません。
|