なぜ次のコードはLvalue requiredエラーを報告しますか?そして、配列と配列の要素数を引数として受け取り、配列の要素を出力するマクロを書くにはどうすればよいですか?Lvalue required error with macro
#define arr(b) printf("%d",b++);\
printf("%d",b);
int main()
{
arr(5);
}
なぜ次のコードはLvalue requiredエラーを報告しますか?そして、配列と配列の要素数を引数として受け取り、配列の要素を出力するマクロを書くにはどうすればよいですか?Lvalue required error with macro
#define arr(b) printf("%d",b++);\
printf("%d",b);
int main()
{
arr(5);
}
そのマクロの一部はC.がb+1
代わりのb++
を使用することを検討し、有効ではありませんこれは、5++
に展開するので。
マクロを展開する場合は、次を得る:
int main()
{
printf("%d",5++);
printf("%d",5);
}
あなたはエラーが出るようにするには、一定の5
をポストインクリメントすることはできません。
マクロは機能ではありません。あなたはそれが機能のように行動したい場合は、単に機能します
void arr(int b) {
printf("%d",b++);
printf("%d",b);
}
+1 "関数を書いたければ、関数を書いてください"。 –
左の略左辺値の最初のリットル。
左の値のみを割り当てることができます。
x ++
と書いた場合はx = x + 1
と表示されます(また値を取得します)。
だから、問題は、それは多分あなたはこれやりたい5 = 5 + 1
を書くことは意味がないです。内部のすべてを括弧...
int x = 5;
arr(x);
が、それはない「仕事」をしていることを無視しマクロ定義!それが 'arr(6 * 3)'で '呼び出された 'としましょう。... #define arr(b)printf("%d "、(b)++); printf( "%d"、b); ' – pmg
よろしいですか..質問の他の部分に誰かが答えることができますか? – user1232138