22

#ifdef Win32は安全な呼び出しにも使用していましsprintf_sたが、今は MinGW でプロジェクトをビルドしたいのですが、今は間違っています。私はそれを使用する必要があります#ifdef VC++。出来ますか?

4

3 に答える 3

50
#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
于 2013-02-28T04:39:07.807 に答える
11

Visual Cの定義済みマクロの「Microsoft 固有の定義済みマクロ」の表を参照してください。

を確認でき_MSC_VERます。

于 2013-02-28T04:35:50.190 に答える
8

できれば、ポータブル シンボルを使用する必要があります。これらのシンボルが定義されていない場合があることは理解しています。そのため、標準、コンパイラ、ライブラリ、オペレーティング システム、および移植できないアーキテクチャに関するプリプロセッサ マクロの広範なリストについては、 Predef プロジェクトを参照してください。

ただし、この質問で具体的に言及している機能は、境界チェック インターフェイス (ライブラリ) である Annex K.3の一部として C11 標準に含まれています。

K.3.1.1p2は次のように述べています。

K.3 およびその節で宣言または定義されている関数、マクロ、および型は__STDC_WANT_LIB_EXT1__、適切なヘッダーが存在するソース ファイル内のポイントで整数定数 1 に展開されるマクロとして定義されている場合、それぞれのヘッダーによって宣言および定義されます。最初に含まれる

したがって、チェックを優先し__STDC_WANT_LIB_EXT1__、コンパイラ固有のシンボルが存在しない場合にのみ使用する必要があります。

于 2013-02-28T04:54:53.293 に答える