#ifdef Win32
と同様に安全な呼び出しにsprintf_s
を使用しましたが、今はMinGWでプロジェクトをビルドしたいのですが、今は間違っています。 #ifdef VC++
またはそのようなものを使用する必要があります。出来ますか?
Visual Cの定義済みマクロ の「Microsoft固有の定義済みマクロ」の表を参照してください。
_MSC_VER
を確認できます。
#ifdef __clang__
/*code specific to clang compiler*/
#Elif __GNUC__
/*code for GNU C compiler */
#Elif _MSC_VER
/*usually has the version number in _MSC_VER*/
/*code specific to MSVC compiler*/
#Elif __BORLANDC__
/*code specific to borland compilers*/
#Elif __MINGW32__
/*code specific to mingw compilers*/
#endif
できれば、ポータブルシンボルの使用に頼る必要があります。これらのシンボルが定義されていない場合があることを理解しているので、標準、コンパイラ、ライブラリ、オペレーティングシステム、およびアーキテクチャに関するプリプロセッサマクロの広範なリストについては Predefプロジェクト を参照してくださいポータブルではありません。
ただし、この質問で具体的に言及している関数は、 付録K.3、境界チェックインターフェイス(ライブラリ) の一部としてC11標準に含まれています。
K.3.1.1p2 状態:
__STDC_WANT_LIB_EXT1__
がソースファイル内のポイントで整数定数1に展開されるマクロとして定義されている場合、K.3およびその副次句で宣言または定義されている関数、マクロ、およびタイプは、それぞれのヘッダーによって宣言および定義されています。適切なヘッダーが最初に含まれる場所
したがって、__STDC_WANT_LIB_EXT1__
をチェックすることを優先し、コンパイラ固有のシンボルが存在しない場合にのみ使用する必要があります。