Visual C++ 標準のコンパイラ cl.exe で警告レベルを /W4 にしてコンパイルすると、一度も使われていない変数に対して警告が発せられますが、 argc や argv など、場合によっては使わない可能性がある変数を警告から守る(?)方法を WEB で見つけました。
方法は簡単、使わない変数を void でキャストするだけです。
int main(int argc, char *argv[]) { static_cast<void>(argc); // ←ここと… static_cast<void>(argv); // ←ここ return 0; }
ただ、基本的に警告に対しては真摯に向き合った方が良いと思います。変数を自分で用意しておいて使わないというのは、何か間違えているような気がします(ましてや1度も使ってないというのは凡ミスですよね)。
何かの情報を WEB で検索しているときに見つけたのですが、これ、どこかの書籍でも書いてあったかもしれません。
Comments
引数名を省略してしまえばいいんじゃないでしょうか?
int main(int, char*[])
{
・・・
}
自分は単に、 argc, argv; と記述します。
…が、この手の記述は所詮バッドノウハウで、これで警告を消せるコンパイラもあれば、元々使っていない変数についての警告を出さないコンパイラであれば逆に意味がないコードが記述されているとして警告がでちゃったりします。(‘A`)
> bleis-tift さん
ご訪問ありがとうございます。
int main(void) というのが何か違うような気がしていつも仮引数書いてたのですが、
こういう書き方ができるとは知りませんでした(驚
教えていただいてありがとうございます m(_ _)m
>道化師さん
むぉ、そうか、そのまま変数を書けば良いんですね。
たぶん、それで式になりますよね。 void の関数とかそうですし。
「意味がないコード」と警告の出るコンパイラの存在を知りませんでした。
ありがとうございます m(_ _)m
使っていない変数に警告が出ないというのもコンパイラの設計ポリシーなのか、
性格があるみたいで面白いですね。
はじめまして.Visual C++ なら
#ifdef _MSC_VER
#pragma warning (disable : 4100)
#endif
とかもどうでしょう.Visual C++ からコンパイラが変われば _MSC_VER が定義されていないので無視されますし.
多分これがコンパイラにとってもプログラマにとってもベターな解決策なんじゃあないかなぁ,と思って私は使ってますw (^^;
>かさん
はじめまして、ご訪問ありがとうございます。
なるほどプリプロセッサで振り分けるのも手ですね。
今回のケースだけでなく、コンパイラによってコードやプラグマを変えたいようなことがあると思いますが、
そういった際に判断材料となる、コンパイラ定義の定数一覧なんか勉強しておきたいです。
まずは _MSC_VER が勉強になりました。
ありがとうございます(^^
Contributions