2016-07-23 8 views
2

int k=(a++,++a)というステートメントを使用したコードスニペットが表示されました。 これは(a++,++a)の文の種類と評価方法を理解できません。なぜここでブラケットが使用されていますか?関数呼び出しですか?次のコードはどのようにCで評価されますか?

ここにコードがあります。

#include <stdio.h> 
int main(void) { 
    int a=5; 
    int k=(a++,++a); 
    printf("%d\n",k); 
    return 0; 
} 

出力は7です - それはなぜですか?

+0

コードは確実ですか? int k =(a ++、++ a);ソースコードはコンパイルされますか? –

+1

はい、o/pは '7'となります – a874

+3

@LeonidasMenendez私は正しく書かれていると確信しています。彼はコンマ演算子を使用しています。 – WhozCraig

答えて

6

これは関数呼び出しではありません。

これは、各式を左から右に評価し、一番右の式の結果を返すコンマ演算子の使用例です。それははい、あなた、それは

k = a++, ++a; 

を書かれていた場合、それは

k = a++; 
++a; 
0

として

(k = a++), ++a; 

と評価されるように解析されていたであろう

a++; 
k = ++a; 

を書くのと同じですそうです。次のコード

int main(void) { 
    int y=1,x=0; 
    int l=(y++,x++)?y:x; 
    printf("%d ",l); 
    return 0; 
} 

が出力として1生成理由です。

したがって右端発現およびlの値が1なるすなわち(y++,x++)戻りxの値。

関連する問題