「VC PlusPlus:VC2019Community コンパイルエラー snprintfが2重定義されている 対処方法」の版間の差分

提供:yonewiki
編集の要約なし
編集の要約なし
11行目: 11行目:
 既存のプロジェクト側でsnprintfを定義している場合は以下のような箇所があるはずです。
 既存のプロジェクト側でsnprintfを定義している場合は以下のような箇所があるはずです。


<syntaxhighlight lang="cpp">
<syntaxhighlight lang="C++">
#ifdef _MSC_VER
#ifdef _MSC_VER
#define snprintf _snprintf
#define snprintf _snprintf
19行目: 19行目:
 #indef~#endifで囲われていないパターンもあるかもしれません。
 #indef~#endifで囲われていないパターンもあるかもしれません。


<syntaxhighlight lang="cpp">
<syntaxhighlight lang="C++">
#if _MSC_VER < 1900
#if _MSC_VER < 1900
//#ifdef _MSC_VER
//#ifdef _MSC_VER

2022年9月26日 (月) 09:50時点における版

VC PlusPlusに戻る

概要

 新しいVisual Studioを使っていると発生する事がある悲しいエラーです。昔は無かったので、誰かが作った既存のプロジェクトが再定義していることがあります。うまいこと、無効にしましょう。

1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdio.h(1933,1): warning C4005: 'snprintf': マクロが再定義されました。
1>$(任意のプロジェクトへのパス名)(行番号): message : 'snprintf' の以前の定義を確認してください
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdio.h(1935,1): fatal error C1189: #error:  Macro definition of snprintf conflicts with Standard Library function declaration

 既存のプロジェクト側でsnprintfを定義している場合は以下のような箇所があるはずです。

#ifdef _MSC_VER
#define snprintf _snprintf
#endif

 #indef~#endifで囲われていないパターンもあるかもしれません。

#if _MSC_VER < 1900
//#ifdef _MSC_VER
#define snprintf _snprintf
#endif

 VS 2019 以前の場合だけ定義して動かすという意味にするとか、こんな感じに修正しましょう。もっと前のバージョン番号にしなければならないかもしれません。_MSC_VERという文字の上にカーソルを持って行くと、現在使っているVisual Studio C++のバージョン番号が表示されますので、そのバージョン以前が無効になるような数値を指定しましょう。今使っているバージョンでは現行のバージョンに含まれるstdio.h系を使うという意味です。

 

VC PlusPlusに戻る