Visual Studioのデフォルトでプロジェクトから安全な警告(_CRT_SECURE_NO_WARNINGS)を削除する


195

scanf()などの関数を使用するときに表示されるプリコンパイラの安全な警告をすべてのプロジェクトにデフォルトで設定する方法はありますか?プロジェクトオプションまたは#define _CRT_SECURE_NO_WARNINGSコードの先頭にa を追加することでそれを実行できることがわかりました。

私はプログラミングコンテストを解決するための新しいプロジェクトを繰り返し作成していることに気づき、追加するのは本当に面倒です(そして貴重な時間がかかります)。

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

コードの最初、または新しいプロジェクトを開始するたびにプリコンパイラオプションで設定する。


2
_CRT_SECURE_NO_WARNINGSが定義されたプロジェクトテンプレートをエクスポートできます。
BlueWanderer 2013年

それは良い回避策のようです。調べています。ありがとう!
フアンマルティネス

3
最後の1を忘れた#define _CRT_SECURE_NO_WARNINGS 1
Martijn van

3
最後の@MartijnvanWezel 1は不要です。
qqqqq 2017年

1
@qqqqq強制的にtrueになります
Martijn van

回答:


286

ソリューションエクスプローラーで目的のプロジェクトをすべてマークします。

Alt-F7を押すか、ソリューションエクスプローラーで右クリックして[プロパティ]を選択します

構成:すべての構成

プリプロセッサー定義行をクリックして、エディターを起動します。

編集を選択...

「_CRT_SECURE_NO_WARNINGS」を上部のプリプロセッサ定義の白いボックスにコピーします。

ここに画像の説明を入力してください


10
これは、OPがすでに知っていると思う1つのプロジェクトにそれを追加する方法を説明しています(100%明確ではありませんが)。重要な問題は、それをすべてのプロジェクトに表示されるように追加する方法です。理想的には、それを%(PreprocessorDefinitions)マクロに追加して、どこにでも含めることができるようにするにはどうすればよいですか?
Rob Gilliam

1月13日、2015年のような固定

これは最初のステップのみを説明しています。すべてを必要な方法で構成したら、プロジェクトテンプレートもエクスポートする必要があります(手順については、「方法:プロジェクトテンプレート作成する」を参照してください)。
IInspectable

92

それは、私がまだVSに不慣れで、Cに不慣れなためかもしれませんが、ビルドを可能にしたのは、

#pragma warning(disable:4996)

私のファイルの一番上で、これは私がsprintfで得ていたC4996エラーを抑制しました

少し面倒ですが、私の小さなコードに最適で、はるかに簡単です。

私はそれについてここで読みました:https : //msdn.microsoft.com/en-us/library/2c8f766e.aspx


5
このページに表示されている#defineのすべてのバリエーション(最後に1がある場合とない場合)を試してみましたが、#pragmaだけが機能しました。(VS2013コミュニティエディション)何かが足りないと私は確信していますが、ある時点で、問題を解決するためにそれが機能するために必要なだけです。
Spike0xff

まったく同じだった-それはひどく感じますが、結局のところ、f ***、それは@ Spike0xffで機能します
Shaun314

2
_CRT_SECURE_NO_WARNINGSがVC ++ 2015では機能しないが、上記では機能することを確認できます。ありがとう!
Shital Shah 2016

@ShitalShah確認は個人的な実験またはいくつかの公式のMicrosoftドキュメントに基づいていますか?
qqqqq 2017年

1
@bri:無条件にデフォルトを設定すると、望ましくない影響が生じる可能性があります。あなたは本当にその振る舞いを以前の状態に戻すつもりでした。これを行うには、代わりに#pragma warning(push)/#pragma warning(pop)を使用します。
IInspectable

29

自動的ではありません。BlueWanderedが提案するようにプロジェクトテンプレートを作成する、現在および将来のすべてのプロジェクトに使用できるカスタムプロパティシートを作成できます。

  1. プロパティマネージャを開きます([表示]-> [プロパティマネージャ])。
  2. プロパティマネージャーでプロジェクトを右クリックし、[新しいプロジェクトプロパティシートを追加]を選択します。
  3. 名前を付けて、共通のディレクトリに作成します。プロパティシートがすべてのビルドターゲットに追加されます。
  4. 新しいプロパティシートを右クリックし、[プロパティ]を選択します。これにより、プロパティが開き、プロジェクトで編集する場合と同じように設定を変更できます。
  5. 「共通のプロパティ-> C / C ++->プリプロセッサ」に移動します
  6. 「プリプロセッサ定義」設定を編集して、を追加し_CRT_SECURE_NO_WARNINGSます。
  7. 保存して完了です。

これで、新しいプロジェクトを作成するたびに、このプロパティシートを次のように追加します...

  1. プロパティマネージャを開きます([表示]-> [プロパティマネージャ])。
  2. プロパティマネージャーでプロジェクトを右クリックし、[既存のプロジェクトプロパティシートを追加]を選択します。

ここでの利点は、共通の設定を管理するための単一の場所を取得するだけでなく、設定を変更するたびに、それを使用するすべてのプロジェクトに伝達されることです。これは_CRT_SECURE_NO_WARNINGS、プロジェクトで使用したい設定やBoostなどのライブラリーがたくさんある場合に便利です。


それは素晴らしいです。今日までプロパティマネージャーを発見したことがないとは信じられません。
James Johnston、

20

ここでのすべてのソリューションは私のVS2013で機能しませんでした#define _CRT_SECURE_NO_WARNINGSが、直前にstdafx.hに#pragma onceをすべての警告が抑制される。注:私は自分の研究をサポートするためにプロトタイピングの目的でのみコード化しています。そのため、コードを記述するときは、このメソッドの意味を理解してください。

お役に立てれば


1
どこにありstdafx.hますか?
SomethingSomething

1
知らない人は、次のように1と定義する必要があります。#define _CRT_SECURE_NO_WARNINGS 1
kirk.burleson

11

VS 2017の2セント:

stdafx.hでこれらのスタイルの両方で機能することを確認できます。

a)

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 

b)

#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 
#pragma once

(MSDNネットワーク呼び出しに別の定義を追加しました。)もちろん、私はa)を好みます。

#define _CRT_SECURE_NO_WARNINGS(値なし)は機能しません

PS実際のポイントは、これらの定義を関数の宣言の前、つまり* .hの前に置くことです。


Visual Studio 2010でも機能します。
ebyrob 2018年

8

" _CRT_SECURE_NO_WARNINGS "をコピーするだけで、プロジェクトに貼り付けます->プロパティ-> c / c ++->プリプロセッサ->プリプロセッサの定義 [OK]をクリックします。


0

プロジェクトでstdafx.hを使用しない場合は、次の行を.cppファイルの最初の行として配置すると、コンパイラの警告が表示されなくなります。少なくとも、Visual Studio C ++ 2008ではそれが行われました。

#ifdef _CRT_SECURE_NO_WARNINGS
#undef _CRT_SECURE_NO_WARNINGS
#endif
#define _CRT_SECURE_NO_WARNINGS 1

その前にコメントと空白行があっても問題ありません。


0

プロジェクトのプロパティに_CRT_SECURE_NO_WARNINGSを追加することもできますが、最も簡単な方法は、あらゆる種類の警告とエラーを無効にするためにstdafx.hを使用することです。

#pragma once

また、_CRT_SECURE_NO_WARNINGSが定義されている限り、値(つまり "1")を定義する必要はありません。したがって、次のようになります。

#define _CRT_SECURE_NO_WARNINGS 

#pragma once

これは誤りです。順序は変わりません。全然。理由がないのに、なぜこれが必要だったのか説明したことがないと思います。
IInspectable

これは「順序」の問題ではなく、もう一度確認します。#pragmaの後に#define _CRT_SECURE_NO_WARNINGSを1回配置した場合でも、このエラーが発生します。
Michael Haephrati

の動作#pragma onceは実装定義ですが、Visual Studioの一般的な事実上の標準に従います。プラグマの前または後にプリプロセッサシンボルを定義したかどうかに関係なく、違いが出る場合は、プロジェクト構成が壊れています(これは、「プリコンパイル済みヘッダー」「stdafx.hを同じように想定しているためです」 ")。
IInspectable

「壊れたプロジェクト構成」の意味は何ですか?新しいWin32プロジェクトを作成し、両方のシナリオをテストしました。
Michael Haephrati

このプリプロセッサシンボルを使用するための真の要件については、公式ドキュメントをご覧ください。
IInspectable
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.