2012-03-24 8 views
0

なぜ次のコードはLvalue requiredエラーを報告しますか?そして、配列と配列の要素数を引数として受け取り、配列の要素を出力するマクロを書くにはどうすればよいですか?Lvalue required error with macro

#define arr(b) printf("%d",b++);\ 
       printf("%d",b); 


int main() 
{ 
    arr(5); 
} 
+0

が、それはない「仕事」をしていることを無視しマクロ定義!それが 'arr(6 * 3)'で '呼び出された 'としましょう。... #define arr(b)printf("%d "、(b)++); printf( "%d"、b); ' – pmg

+0

よろしいですか..質問の他の部分に誰かが答えることができますか? – user1232138

答えて

1

そのマクロの一部はC.がb+1代わりのb++を使用することを検討し、有効ではありませんこれは、5++に展開するので。

4

マクロを展開する場合は、次を得る:

int main() 
{ 
    printf("%d",5++); 
    printf("%d",5); 
} 

あなたはエラーが出るようにするには、一定の5をポストインクリメントすることはできません。

マクロは機能ではありません。あなたはそれが機能のように行動したい場合は、単に機能します

void arr(int b) { 
    printf("%d",b++); 
    printf("%d",b); 
} 
+3

+1 "関数を書いたければ、関数を書いてください"。 –

1

左の略左辺値の最初のリットル

左の値のみを割り当てることができます。

x ++と書いた場合はx = x + 1と表示されます(また値を取得します)。

だから、問題は、それは多分あなたはこれやりたい5 = 5 + 1

を書くことは意味がないです。内部のすべてを括弧...

int x = 5; 
arr(x);