アカウント名:
パスワード:
正しく記述されていない所には、
- typo (i と jとか)- 型を根本的に理解し間違えている ( char * で受けるはずのものが int * になっているとか )- ロジックが間違っている ( if ( i == j ) のはずが if ( i = j ) とか)
などの間違いが潜んでいるものです。つまり、そこをtypeしているときに、一瞬脳が寝ていた可能性がある。
Warningがどこで発生しているのかを調べたら「そこがそもそも正しく記述されているのか」「そこは何を意図しているコードなのか」を調査することで、多くのバグを事前に潰すことができます。あるWarningを消す、というのは「そこを再検討してみましたが、やはり正しいようです」という意味でもあります。なので、Warningは限界まで消すべきなのです。
# まぁ、それでも結構バグってるしなぁ…
Cを使ったプログラミングの講義を担当していますが、学生には -Wall と -Werror の両方を付けてコンパイルするよう指導しています。ときどき「この警告は必然なのです」と文句を言ってくる学生もいるのですが、ほとんどは型をきちんと書けば出なくなるようなものばかりなので、正しい型の書き方を教えれば納得してくれますね。
仕事でCでプログラミングしてますが、-Wallと-pedanticをつけるように決まっています。バグの原因、教育によくない、メンテナンスの手間が増える、等の理由から警告は出来る限り潰すようにしています。
つけるオプションがプロジェクトで決まっているためそこまで考えたことありませんでした……。その上-Oが必要な理由がわかりませんでしたorzhttp://www.sra.co.jp/wingnut/gcc/gcc-j.html#Optimize%20Options [sra.co.jp]ここを読んでみたんですが……。
警告について知りたいのなら、こちらを見るべきでは...
http://www.sra.co.jp/wingnut/gcc/gcc-j.html#Warning%20Options [sra.co.jp]
最適化を伴わない場合に出力されない警告があるので、-O などがないと片手落ちになる場合があります。たとえば、以下のオプションが該当します。
-Wuninitialized 自動変数が、最初に初期化する前に使われている場合に警告をだす。 この警告は、最適化を伴うコンパイルの場合にのみ発生する。なぜなら、この警告を出すには、最適化を行なった場合にのみ計算される、データフロー情報を必要とするからである。-O を指定しない場合には、単にこの警告が出ないだけである。
-Wuninitialized 自動変数が、最初に初期化する前に使われている場合に警告をだす。
この警告は、最適化を伴うコンパイルの場合にのみ発生する。なぜなら、この警告を出すには、最適化を行なった場合にのみ計算される、データフロー情報を必要とするからである。-O を指定しない場合には、単にこの警告が出ないだけである。
おお、理解しました。次のプロジェクトで提案してみます。#1512801の方も#1512973の方もどうもありがとうございます。
Warningをほったらかしにするプログラマに「Warningを消せ」と指示したら-wオプションを使った輩がいたそうな。
いやまぁ、限界まで消えるけどさぁ…
昔、「メモリが化ける!いい加減なハードを渡すな!」と文句を言われて(ソース見せてくれないので)オブジェクトのディスアセンブルとロジックアナライザを駆使して調べてみたら、
> - ロジックが間違っている ( if ( i == j ) のはずが if ( i = j ) とか)
のパターンだったことがありますなぁ。が、しかし、Warningは全部潰してる、という話だったので、makefileを出させたら、
> Warningをほったらかしにするプログラマに「Warningを消せ」と指示したら> -wオプションを使った輩がいたそうな。
というパターンだったということが・・・。
#もっと痛かったのは、役員経由で日程遅延の理由としてクレームをつけてくれたソ フト屋さんの上司は、結局その役員に結果を説明せずじまいだったこと。 ま、おかげでハッピーになっているという説もありますので、結果オーライかも。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア
そもそもWarningが出るということは,正しく記述されていない、と言うこと。 (スコア:5, 参考になる)
正しく記述されていない所には、
- typo (i と jとか)
- 型を根本的に理解し間違えている ( char * で受けるはずのものが int * になっているとか )
- ロジックが間違っている ( if ( i == j ) のはずが if ( i = j ) とか)
などの間違いが潜んでいるものです。つまり、そこをtypeしているときに、一瞬脳が寝ていた可能性がある。
Warningがどこで発生しているのかを調べたら「そこがそもそも正しく記述されているのか」「そこは何を意図しているコードなのか」を調査することで、多くのバグを事前に潰すことができます。
あるWarningを消す、というのは「そこを再検討してみましたが、やはり正しいようです」という意味でもあります。なので、Warningは限界まで消すべきなのです。
# まぁ、それでも結構バグってるしなぁ…
fjの教祖様
Re:そもそもWarningが出るということは,正しく記述されていない、と言うこと。 (スコア:5, 参考になる)
Cを使ったプログラミングの講義を担当していますが、学生には -Wall と -Werror の両方を付けて
コンパイルするよう指導しています。ときどき「この警告は必然なのです」と文句を言ってくる学
生もいるのですが、ほとんどは型をきちんと書けば出なくなるようなものばかりなので、正しい型
の書き方を教えれば納得してくれますね。
Re:そもそもWarningが出るということは,正しく記述されていない、と言うこと。 (スコア:1)
仕事でCでプログラミングしてますが、-Wallと-pedanticをつけるように決まっています。
バグの原因、教育によくない、メンテナンスの手間が増える、等の理由から警告は出来る限り潰すようにしています。
Re: (スコア:0)
Re:そもそもWarningが出るということは,正しく記述されていない、と言うこと。 (スコア:1)
つけるオプションがプロジェクトで決まっているためそこまで考えたことありませんでした……。
その上-Oが必要な理由がわかりませんでしたorz
http://www.sra.co.jp/wingnut/gcc/gcc-j.html#Optimize%20Options [sra.co.jp]
ここを読んでみたんですが……。
Re:そもそもWarningが出るということは,正しく記述されていない、と言うこと。 (スコア:1, 参考になる)
警告について知りたいのなら、こちらを見るべきでは...
http://www.sra.co.jp/wingnut/gcc/gcc-j.html#Warning%20Options [sra.co.jp]
最適化を伴わない場合に出力されない警告があるので、-O などがないと片手落ちになる場合があります。
たとえば、以下のオプションが該当します。
Re:そもそもWarningが出るということは,正しく記述されていない、と言うこと。 (スコア:1)
おお、理解しました。
次のプロジェクトで提案してみます。
#1512801の方も#1512973の方もどうもありがとうございます。
Re: (スコア:0)
Warningをほったらかしにするプログラマに「Warningを消せ」と指示したら
-wオプションを使った輩がいたそうな。
いやまぁ、限界まで消えるけどさぁ…
Re: (スコア:0)
昔、「メモリが化ける!いい加減なハードを渡すな!」と文句を言われて(ソース見
せてくれないので)オブジェクトのディスアセンブルとロジックアナライザを駆使
して調べてみたら、
> - ロジックが間違っている ( if ( i == j ) のはずが if ( i = j ) とか)
のパターンだったことがありますなぁ。
が、しかし、Warningは全部潰してる、という話だったので、makefileを出させたら、
> Warningをほったらかしにするプログラマに「Warningを消せ」と指示したら
> -wオプションを使った輩がいたそうな。
というパターンだったということが・・・。
#もっと痛かったのは、役員経由で日程遅延の理由としてクレームをつけてくれたソ
フト屋さんの上司は、結局その役員に結果を説明せずじまいだったこと。
ま、おかげでハッピーになっているという説もありますので、結果オーライかも。