7

WindowsSDKがインストールされています。以前、Visual C ++2008Expressを使用してN++を正常にビルドしました。しかし、2010年には、次のようなエラーメッセージがたくさんありますsprintf_s

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string(676): error C2039: 'sprintf_s' : is not a member of '`global namespace''
1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string(676): error C3861: 'sprintf_s': identifier not found

助けてください。

4

3 に答える 3

20

no_ms_shit.props (変換後) という名前のプロジェクトに含まれるプロパティ シートがあります。MSが過去5年間やろうとしてきたことに対して、そのシートにはかなりの憎しみが表明されています.

彼らはすべてを無効にして、少しやり過ぎました。さらに、sprintf_s() へのリンクを無効にしました。これがエラーの原因です。 stdio.h ヘッダーは宣言を省略していますが、文字列ヘッダーはそれを使用しています。Express エディションがプロジェクト プロパティ シートの編集をサポートしているかどうかは不明ですが、製品版の手順は次のとおりです。

  • ビュー + プロパティ マネージャー
  • ノードの 1 つを開き、「no ms shit」を見つけます。
  • それを右クリックし、プロパティ
  • C/C++、プリプロセッサ、プリプロセッサ定義
  • __STDC_WANT_SECURELIB__=01に変更
  • これらの定義に _CRT_SECURE_NO_WARNINGS を追加します

プロジェクトはクリーンにコンパイルされます。ファイルをコピーするとビルド エラーが発生します。これはビルド後のイベントです。修正方法がわからない場合は、別の質問を開始してください。

于 2010-09-14T16:41:56.837 に答える
4

変。Visual Studio 2010 Ultimate を使用していますが、View->Property Pages メニュー項目にアクセスすることさえできません。私にとっては無効になっています。

しかし、私はファイル no_ms_shit.props に行き、それをメモ帳++でのみ編集しました:)。次に、[プロジェクト] -> [プロパティ] -> [構成プロパティ] -> [全般] に移動し、警告をエラーとして扱うために [いいえ] を選択し、プリプロセッサ定義に _CRT_SECURE_NO_WARNINGS を追加しました。

Don Ho は、Windows と Visual Studio で開発しているときに、ms のたわごとを呪うよりも、流れに乗る必要があります。


Visual Studio 2012 Professional を使用している場合、これは私にとってはうまくいきました:

  • no_ms_shit.vspropsを編集する必要があります(*.props だけでなく、*.vsprops も!
    ) __STDC_WANT_SECURE_LIB__=0:__STDC_WANT_SECURE_LIB__=1

  • _CRT_SECURE_NO_WARNINGSをプリプロセッサ定義に追加します。

于 2010-11-01T00:40:16.983 に答える
2

ソースをよく見ると、このプロパティ シートを使用しない限り、無限のノイズを引き起こすライブラリ呼び出しのほとんどが SciLexer.dll プロジェクトからのものであることがわかります。Scintilla はクロス プラットフォームであるため、Windows 固有のクラフトをすべて必要とするわけではありません。

したがって、この批判は Don Ho ではなく Neil Hodgson (Scintilla の主な開発者) に向けることができます。

クリス

于 2010-12-06T13:50:14.083 に答える