ポインタ演算を実行したいvoidポインタがあります。そうするために、私はそれをcharポインタにキャストしたいと思います。
( char * ) buf += current_size;
ただし、そうすると、次のエラーが発生します。
error: lvalue required as left operand of assignment
左側全体にも括弧を入れてみましたが、うまくいきませんでした。なぜ私はこれを手に入れるのですか?
ポインタ演算を実行したいvoidポインタがあります。そうするために、私はそれをcharポインタにキャストしたいと思います。
( char * ) buf += current_size;
ただし、そうすると、次のエラーが発生します。
error: lvalue required as left operand of assignment
左側全体にも括弧を入れてみましたが、うまくいきませんでした。なぜ私はこれを手に入れるのですか?
なぜ私はこれを手に入れるのですか
言語規則が、オペランドが1であっても、キャストは左辺値を生成しないと述べているからです。
脚注、91ページ
キャストは左辺値を生成しません。
代入演算子を書き出すことで、警告を回避できます。
buf = (char *)buf + current_size;
警告が表示される理由の1つは、sizeof(void)
未定義であり、で算術演算を実行できないことですvoid *
。注意:GCCには拡張機能があり、コードをのように扱いますsizeof(void) == 1
が、C標準にはありません。
割り当てのLHSでのキャストは、割り当てに影響を与えません。
無効であるため、これを行うことはできません。これを達成したい場合は、
bufをcharポインタとして宣言します。または一時変数を使用します。
char *tmp = buf; // note you don't need the casting, void * works with everything
tmp += current_size;
buf = tmp;
編集:他の人も示唆しているように、その醜いtmpを削除することもできます:
buf = (char *)buf + current_size;