互換性に影響する CRT の変更点

更新 : 2007 年 11 月

ここでは、互換性に影響する CRT の変更点について説明します。

互換性に影響する変更点

  • 多くの関数が廃止されています。使用を推奨されていない CRT 関数 を参照してください。

  • 多くの関数にパラメータの検証機能が実装されました。無効なパラメータが指定された場合は実行が中止されます。したがって、こうした関数に無効なパラメータが渡されても、無視されるか、単にエラー コードが返される、という前提でコードを設計していた場合は注意が必要です。今後は、正常に機能しなくなります。「パラメータの検証」を参照してください。

  • ファイル記述子の値 -2 は現在、stdoutstderr が、たとえば、コンソール ウィンドウがない Windows アプリケーションの場合など、出力用に使用できないことを示すために使用されます。以前は -1 でした。詳細については、「_fileno」を参照してください。

  • シングルスレッド CRT ライブラリの libc.liblibcd.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」を参照してください。

参照

概念

Visual C++ 2005 ライブラリの変更点

参照

C ランタイム ライブラリ