Visual C++の警告抑止について
警告抑止の対象
まず第一に、何でもかんでも警告抑止するのはやめましょう。本当にこの警告は抑止するべきなのかどうか見極めましょう。
多くの場合、VisualC++独自で定義している関数を使用しなさいという警告は抑止してかまいません。筆者は積極的に抑止しています。
警告の抑止の方法には多くのパターンがありますが、今回は警告を抑止する方法を2つ紹介します。
注意:筆者の開発環境はVisual C++ 2008 Express Editionです。
多くの場合、VisualC++独自で定義している関数を使用しなさいという警告は抑止してかまいません。筆者は積極的に抑止しています。
警告の抑止の方法には多くのパターンがありますが、今回は警告を抑止する方法を2つ紹介します。
注意:筆者の開発環境はVisual C++ 2008 Express Editionです。
警告抑止の方法
つぎのソースをコンパイルしてみましょう。
#include<stdio.h> int main(){ int Damare; scanf("%d",&Damare); return 0; }
デフォルトの設定のままだと以下のような警告文が表示されます。
warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
scanf関数はセキュリティが万全な関数ではないので、scanf_s関数を使用するべきです。この警告を消したいなら_CRT_SECURE_NO_WARNINGSを定義しなさい。って感じの意味です。
scanf関数はもとより、多くの関数は適切に使用しないとバグを引き起こす原因となります。scanf関数は性質上、バグを引き起こしやすい関数です。そのため、VisualC++独自にセキュリティを強化したscanf_s関数の使用を薦めています。ちなみにscanf関数は適切に使用しないと変数のサイズを超えて値の入力を受け取ります。箱の大きさを無視しちゃうわけです。あふれちゃうわけです。他の変数の範囲に侵食しちゃうわけです。
_CRT_SECURE_NO_WARNINGSを定義する、というのは次のサンプルを見てください。
scanf関数はもとより、多くの関数は適切に使用しないとバグを引き起こす原因となります。scanf関数は性質上、バグを引き起こしやすい関数です。そのため、VisualC++独自にセキュリティを強化したscanf_s関数の使用を薦めています。ちなみにscanf関数は適切に使用しないと変数のサイズを超えて値の入力を受け取ります。箱の大きさを無視しちゃうわけです。あふれちゃうわけです。他の変数の範囲に侵食しちゃうわけです。
_CRT_SECURE_NO_WARNINGSを定義する、というのは次のサンプルを見てください。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main(){ int Damare; scanf("%d",&Damare); return 0; }
もうひとつの方法は警告番号を指定して抑止する方法です。抑止対象を細かく指定できるので、こちらを積極的に使いましょう。警告番号とは、警告メッセージの
warning C4996...
この部分の数字です。使い方はサンプルソースを見てください。
#include<stdio.h> #pragma warning(disable:4996) int main(){ int Damare; scanf("%d",&Damare); return 0; }
Visual C++ 2008 Express Editionでは次のように指定することも出来ます。ちょっと面倒ですが覚えておくと何かと便利です。
- ツールバーから『プロジェクト』→『(プロジェクト名)のプロパティ』
- 上の構成を『すべての構成』に変更
- 『構成プロパティ』→『C/C++』→『詳細』→『指定の警告を無効にする』に警告番号を入力
筆者はこれを用いて抑止しています。