文字列のポインタのポインタ(多重ポインタ)を利用する場面で、インクリメントをしようとしたらエラーになりました。
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;
}
このように変数部分にかっこをつける修正をしたところ、エラーが解消しました。
間接参照演算子の優先順位が、インクリメント記号よりも低いことが原因とのこと。
これ知らなかったらハマるやつですね。メモっておこう。
あなたのお役に立てれば嬉しいです。