互換性に影響する CRT の変更点
更新 : 2007 年 11 月
ここでは、互換性に影響する CRT の変更点について説明します。
互換性に影響する変更点
多くの関数が廃止されています。使用を推奨されていない CRT 関数 を参照してください。
多くの関数にパラメータの検証機能が実装されました。無効なパラメータが指定された場合は実行が中止されます。したがって、こうした関数に無効なパラメータが渡されても、無視されるか、単にエラー コードが返される、という前提でコードを設計していた場合は注意が必要です。今後は、正常に機能しなくなります。「パラメータの検証」を参照してください。
ファイル記述子の値 -2 は現在、stdout と stderr が、たとえば、コンソール ウィンドウがない Windows アプリケーションの場合など、出力用に使用できないことを示すために使用されます。以前は -1 でした。詳細については、「_fileno」を参照してください。
シングルスレッド CRT ライブラリの libc.lib と libcd.lib は削除されました。マルチスレッド CRT ライブラリを使用してください。/ML コンパイラ フラグはサポートされなくなりました。いくつかの関数について、マルチスレッド コードとシングルスレッド コード間のパフォーマンスの違いが重要な問題になる状況に備えて、ロックのないバージョンが追加されました。
より標準に準拠するため、pow のオーバーロードの double pow(int, int) は削除されました。
%n 書式指定子は、本質的にセキュリティが弱いことから printf 系では既定でサポートされなくなりました。%n が検出された場合、既定では、無効なパラメータ ハンドラが呼び出されます。%n のサポートを有効にするには、_set_printf_count_output を使用します (_get_printf_count_output の説明も参照してください)。
sprintf は現在、符号付きゼロのマイナス記号を出力します。
swprintf は、サイズ パラメータが必須となり、標準に準拠するように変更されています。サイズ パラメータを持たない swprintf の形式は使用されなくなりました。
_set_security_error_handler は削除されました。この関数の呼び出しはすべて削除してください、既定のハンドラの方が、より安全にセキュリティ エラーを処理します。
time_t は 64 ビット値になりました (USE_32BIT_TIME_T が定義されている場合を除く)。
_spawn 系関数と _wspawn 系関数では現在、C 規格で指定されているように、成功時、エラーはそのままにされます。
RTC は現在、既定でワイド文字を使用します。
浮動小数点制御ワードをサポートする関数は、/CLR または /CLR:PURE でコンパイルされたアプリケーションに対しては使用されなくなりました。影響を受ける関数は、_clear87、_clearfp、_control87、_controlfp、_fpreset、_status87、および _statusfp です。_CRT_MANAGED_FP_NO_DEPRECATE を定義することにより、非推奨警告を無効にできますが、マネージ コードでこれらの関数を使用した場合の動作は予測不能でサポートされていません。
一部の関数では、const ポインタが返されるようになりました。従来の非 const の動作は、_CONST_RETURN を定義することによって引き続き利用できます。影響を受ける関数は、次のとおりです。
Setargv.obj または Wsetargv.obj とリンクしている場合、コマンド ラインでワイルドカード文字が展開されます。従来は、二重引用符で囲むことによってワイルドカード文字の展開を抑制できましたが、今後、この方法で抑制することはできません。詳細については、「Expanding Wildcard Arguments」を参照してください。