パスワードを忘れた? アカウント作成
500446 journal

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 って怒られちゃうんですが、 なんでキャストすると怒られなくなるんだろ……?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • VisualC++だど、UNREFERENCED_PARAMETER ってマクロがあります。(長くてタイプ面倒なので日頃つかわないけど)

    #define UNREFERENCED_PARAMETER(P) (P)

    って、定義されてました。
    なんだ括弧でかこめばいいのか…
    • 変数やリテラルだけを書いた行があっても文法的にはエラーではないってのは、 戻り値無視と同じですよね。

      でも、 それを void キャストしても“statement with no effect”なのは変わらないはずなのに、 警告は出なくなるんですよね。 『プログラマが意図して書いている』っていう意思表示とみなされるのかな?  それとも、 『キャスト操作』に相当する何かはやってるんだろーか──コンパイルされたコード見てみないと。

      なんだ括弧でかこめばいいのか…

      gcc だとこれで警告抑制はできませんでした。 VC++ だとできるのか……  以前使ってた時は #pragma で抑制してましたけど。

      # VC++ だと展開前のマクロ名見て
      # なにかやってるような気がしないでもない……

      親コメント
typodupeerror

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

読み込み中...