2013-09-23 4 views
5

+ +の間にスペースがある場合、式 "+ + a"の意味は何ですか?この式はどのように評価されますか?表現 "+ + a"の意味は何ですか?

int main() 
    { 
     int a = 3; 

     printf("%d %d", + +a, a); 
    } 

a+++aはどのように評価されていますか? 定義されていないか、または指定されていないか、実装が定義されていますか?

答えて

4

++演算子の中に空白がある場合は、単項プラス演算子を2回適用するだけです。表現a+++aについて

、 C仕様では、このようなあいまいさがある場合には、( 「貪欲レクサー」または「最大ムンク」ルール)を可能な限りムシャムシャ食べることを言います。そうa+++aが無効であることを原則、z = y++ ++ +x;として解析されz = y+++++x; 、のような表現によれば、a++ + a

として評価される(ポストインクリメントの結果はincrementableそれ自体です)。

+4

「Maximal Munch」ルールと同様に、よりユーフォニックにも知られています。 –

+0

2つの '+'シンボルの間にスペースがある場合、インクリメント演算子ではないことに注意してください。 2つの独立した '+'演算子です。定義上、 '++ '演算子にスペースを入れることはできません。 –

8

+ aはノーオペレーションで繰り返しているのでノーオペレーションです。

a+++aは、a++ + aと明白に解析されますが、実行時には未定義の動作につながります。

コードセットa = -3;の場合、印刷される値は依然として-3になります。

+1

ちょうどニックピックで、 '+'は必ずしもnopではなく、より広いタイプに変換することもできます。 –

+0

@ JensGustedt:単項 '+'の存在が、単項 '+'が存在しない場合に変更が起こらない変更を強制するコンテキストがありますか?オフハンド、私は考えることができません。 'printf()'の例で 'a'が' char'または 'short'だった場合、' + 'があるかどうかに関わらず' int'への変換が起こります(varargs引数の扱い規則のため) 。 'a = + a;'のような代入があった場合、RHS上の 'char'から' int'への変換は名目上は可能ですが、代入はそれを再び減らします。同じことが ' a = a; '。 –

1

+aは、-aのちょうど反対です。
つまり、-aの符号がaの場合、+aは、既存の正負符号aを再確認します。

はその後、まだ3

に反対のバージョンは次のようになり、その結果、再び外ポジティブあります:

printf("%d %d",- -a,a); 

「負負3」...再び+3あるだろうどの。

+1

'a = -3;'、 'b = + a;'は 'b = abs(a);'と同じではありません。最初のケースでは、 'b'は' -3'です。 2番目の( 'abs()')の場合、 '+ 3'です。 –

+0

私はそれについて考えたことはありませんが、+ aは-aの反対であるとは思わない、+ aはaの値にかかわらず常に正であるが、-aは正または負のどちらかであるポジティブもポジティブです...ちょうどスティン。 –

+5

Will + aは常にプラスになりますか?私はそうは思わない。数学的には、+( - 3)は_still_ -3です... – ppeterka

関連する問題