Visual C ++の変更

Visual C ++コンパイラのバージョンを更新する場合(たとえば、Visual Studioを2013から2015に切り替えるなど)、以前に正常にコンパイルおよび実行されたコードがコンパイルエラーを引き起こすという事実に遭遇する理由を見つけるための場違いではありません/またはランタイムエラー。

これらの問題は、C ++標準に準拠するためのコンパイラへの多数の変更、関数シグネチャの変更、またはメモリ内のオブジェクトの場所の変更によって発生する可能性があります。



実行時エラー(最も見つけにくいことがわかっている)を回避するために、別のバージョンのコンパイラが受け取ったバイナリファイルと静的リンクを作成しないことをお勧めします。 また、プログラム(EXEまたはDLL)を更新するときは、使用するライブラリも新しいバージョンのコンパイラでコンパイルされていることを確認してください。

CRT(Cランタイム)またはSTL(標準テンプレートライブラリ)の型を使用する場合は、異なるバージョンのコンパイラでコンパイルされたバイナリ(DLLを含む)間で型を転送しないでください。 この問題については、 DLLの境界を越えてCRTオブジェクトを渡す潜在的なエラーで詳しく説明します

また、将来的には、メモリ内のオブジェクトの特定の場所に依存するコードを作成しないことをお勧めします(COMインターフェイスまたはPODオブジェクトでない限り)。 そのようなコードがある場合、コンパイラを更新した後、すべてが正常に機能することを確認する必要があります。 詳細については、 ABI境界での移植性(Modern C ++)を参照してください



次の記事では、Visual C ++コンパイラ(Visual Studio 2015 Previewに付属)の変更について説明します。 この記事では、「新しい動作」と「今」という言葉はこのバージョンを正確に指し、「古い動作」と「以前の」はVisual Studio 2013(および以前のバージョン)を指します。



要約:

-コンパイラの変更

-Cランタイムライブラリ(CRT)の変更

-STLの変更

-MFCおよびATLの変更



コンパイラの変更







Cランタイムライブラリ(CRT)の変更



一般的な変更





  <locale.h> 





  <math.h> 






All Articles