etsavの日記: ただぃま~ 2
日記 by
etsav
雨降るなんて聞いてませんでしたょ(←天気予報見なかったおまぃが悪い)。
gcc (3.3.5) 使ってたとおもぃねぃ。 『物理的に徘徊するサーバ』を制御するメインプログラムゎ、 なんせもぉ継ぎ接ぎだらけで、 警告を全部抑制しないとコンパイルがめちゃくちゃ重いって代物だったのだけど、 今作ってる独立クライアントは、 一から自分で書いてるので、 警告を全てエラーとして扱う事にしまして。 やっぱりきれいに書きたいしね~
で、 とりあえず関数が必要だったりして、 空っぽの外殻だけ、
void func(double param)
{
}
なんて書いてとりあえずコンパイルすると、 warning: unused parameter `double param' って怒られるわけで。 まぁ仮引数名を書かないか、 コメントアウトしちゃえばいいんですけどね、 どうせ数分後にはちゃんと引数使うコード書くんだし、 んでもってコメントアウトだと引数の数が多いとまた外すのが面倒なわけで。
そぃで、
void func(double param)
{
(void) param;
}
なんてしてるわけですが。 これだと後で一行消すだけなので。 でもこれ、 void のキャストを外すと、 warning: statement with no effect って怒られちゃうんですが、 なんでキャストすると怒られなくなるんだろ……?
関数の戻り値使わなくてOKってのと同じ理屈かなあ (スコア:1)
#define UNREFERENCED_PARAMETER(P) (P)
って、定義されてました。
なんだ括弧でかこめばいいのか…
Re:関数の戻り値使わなくてOKってのと同じ理屈かなあ (スコア:1)
変数やリテラルだけを書いた行があっても文法的にはエラーではないってのは、 戻り値無視と同じですよね。
でも、 それを void キャストしても“statement with no effect”なのは変わらないはずなのに、 警告は出なくなるんですよね。 『プログラマが意図して書いている』っていう意思表示とみなされるのかな? それとも、 『キャスト操作』に相当する何かはやってるんだろーか──コンパイルされたコード見てみないと。
gcc だとこれで警告抑制はできませんでした。 VC++ だとできるのか…… 以前使ってた時は #pragma で抑制してましたけど。
# VC++ だと展開前のマクロ名見て
# なにかやってるような気がしないでもない……