0

Microsoft 固有の拡張 C ライブラリを使用せずに VS2012 で C プログラムを作成するには?

たとえば、scanf_s() は Microsoft 固有の実装です。しかし、これを使用すると、Linux でコードをコンパイルできなくなります。

したがって、Linux VM を並行して使用して、gcc でコードをコンパイルする必要があります。または、Windows で gcc をセットアップできます。または、VS 2012 自体にこれを達成するためのより良いオプションや微調整がありますか?

4

1 に答える 1

1

「言語拡張機能を無効にする」を設定すると、特定の言語機能が削除されるだけです。これらの機能のリストは、こちらです

ただし、Microsoft が提供する追加機能は言語機能ではありません。それらは、使用したい場合に存在するオプションの機能にすぎません。その設定によって無効になることはありません。_s の接尾辞が付いた標準関数のセキュア バージョンは、このカテゴリに属します。

そうは言っても、ヘッダーの scanf_s の定義に移動すると、Microsoft がこの特定の関数ファミリを無効にする方法を提供していることがわかります。

ヘッダー #includes の前にコードで次を定義すると、

#define __STDC_WANT_SECURE_LIB__ 0

その場合、scanf_s はコンパイルされなくなります。

コンパイラ スイッチを使用してこれを実現する場合は、プロジェクトのプロパティに移動し、プリプロセッサの定義を見つけます。次の定義を末尾に追加します。

__STDC_WANT_SECURE_LIB__#0

おそらく、「標準」C の一部ではない他の追加の Microsoft 機能を無効にする同様の方法を見つけることができます。

于 2013-11-30T18:11:46.750 に答える