多重ポインタのインクリメントはかっこが必要

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

文字列のポインタのポインタ(多重ポインタ)を利用する場面で、インクリメントをしようとしたらエラーになりました。

void func(char **p)
{
  /* 1文字ずつ処理したかった */
  while (**p != '\0')
  {
    /* ここに処理 */
    *p++; // インクリメントで参照先を一つずつ移動
  }
  return ;
}

そうしたら、コンパイル時に以下のエラーが。

error: value computed is not used [-Werror=unused-value]

どうやらこの書き方だと、*(p++) と解釈されてしまうようです。

void func(char **p)
{
  /* 1文字ずつ処理したかった */
  while (**p != '\0')
  {
    /* ここに処理 */
    (*p)++; // ポインタを示すようにかっこで囲む
  }
  return;
}

このように変数部分にかっこをつける修正をしたところ、エラーが解消しました。

間接参照演算子の優先順位が、インクリメント記号よりも低いことが原因とのこと。

これ知らなかったらハマるやつですね。メモっておこう。

あなたのお役に立てれば嬉しいです。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*