次の方法で共有


コンパイラ オプションに関するマクロ

これらのマクロは、特定のコンパイラ機能を制御します。

マクロ 説明
_ATL_ALL_WARNINGS プロジェクトのエラーを以前のバージョンの ATL から変換できるようにするシンボル。
_ATL_APARTMENT_THREADED 1 つ以上のオブジェクトでアパートメント スレッドが使用されているかどうかを定義します。
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS 特定の CString コンストラクターを明示的にし、意図しない変換を防止します。
_ATL_ENABLE_PTM_WARNING C++ 標準構文を必要にするには、このマクロを定義します。 非標準構文を使用してメンバー関数へのポインターを初期化すると、C4867 コンパイラ エラーが生成されます。
_ATL_FREE_THREADED 1 つ以上のオブジェクトでフリー スレッドまたはニュートラル スレッドが使用されているかどうかを定義します。
_ATL_MODULES permissive-で ATL プロジェクトをコンパイルし、C++ モジュールで ATL を使用できます
_ATL_MULTI_THREADED プロジェクトに Both、Free、Neutral としてマークされたオブジェクトがあることを示すシンボル。 代わりにマクロ _ATL_FREE_THREADED を使用する必要があります。
_ATL_NO_AUTOMATIC_NAMESPACE ATL としての名前空間の既定の使用を禁止するシンボル。
_ATL_NO_COM_SUPPORT COM 関連のコードがプロジェクトでコンパイルされないようにするシンボル。
ATL_NO_VTABLE クラスのコンストラクターとデストラクターで vtable ポインターが初期化されないようにするシンボル。
ATL_NOINLINE 関数をインラインにしてはならないことを示すシンボル。
_ATL_SINGLE_THREADED すべてのオブジェクトで単一のスレッド モデルを使用するかどうかを定義します。

_ATL_ALL_WARNINGS

プロジェクトのエラーを以前のバージョンの ATL から変換できるようにするシンボル。

#define _ATL_ALL_WARNINGS

解説

Visual C++ .NET 2002 より前は、ATL によって多くの警告が無効にされ、ユーザー コードに示されないように無効のままになっていました。 具体的には、次のように使用します。

  • C4127 条件式が定数です

  • C4786 '識別子': 識別子がデバッグ情報では '数値' 文字に切り詰められました

  • C4201 非標準の拡張機能が使用されています: 無名の構造体または共用体です

  • C4103 'ファイル名': #pragma パックを使用して配置を変更しました

  • C4291 '宣言': 初期化コードが例外をスローすると、'new' 演算子を使用しているとメモリを解放しません

  • C4268 '識別子': オブジェクトをゼロで埋めるコンパイラが生成した既定のコンストラクターで 'const' static/global データは初期化されました

  • C4702 到達できないコード

以前のバージョンから変換されたプロジェクトでは、これらの警告はライブラリ ヘッダーによってまだ無効になっています。

この動作を変更するには、ライブラリ ヘッダーを含める前に、 pch.h (Visual Studio 2017 以前のstdafx.h ) ファイルに次の行を追加します。

#define _ATL_ALL_WARNINGS

#define を追加すると、ATL ヘッダーによってこれらの警告の状態が保持され、グローバルに無効にされなくなります (または、ユーザーが個々の警告を明示的に無効にした場合、有効にされません)。

新しいプロジェクトでは、この #definepch.h (Visual Studio 2017 以前のでは stdafx.h) において既定で設定されます。

_ATL_APARTMENT_THREADED

1 つ以上のオブジェクトでアパートメント スレッドが使用されているかどうかを定義します。

_ATL_APARTMENT_THREADED

解説

アパートメント スレッドを指定します。 その他のオプション、および ATL オブジェクトで使用できるスレッド モデルの説明については、プロジェクトのスレッド モデルの指定に関する記事および「オプション、ATL シンプル オブジェクト ウィザード」を参照してください。

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

特定の CString コンストラクターを明示的にし、意図しない変換を防止します。

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

解説

このコンストラクターを定義すると、1 つのパラメーターを受け取るすべての CString コンストラクターが明示的なキーワードを使用してコンパイルされ、入力引数の暗黙的な変換が防止されます。 つまり、たとえば、 _UNICODE が定義されている場合、 char* 文字列を CString コンストラクター引数として使用しようとすると、コンパイラ エラーが発生します。 ナロー文字列型とワイド文字列型の間で暗黙的な変換が行われないようにする必要がある場合は、このマクロを使用してください。

すべてのコンストラクター文字列引数で _T マクロを使用すると、 _ATL_CSTRING_EXPLICIT_CONSTRUCTORS を定義し、 _UNICODE が定義されているかどうかに関係なくコンパイル エラーを回避できます。

_ATL_ENABLE_PTM_WARNING

このマクロは、メンバー関数へのポインターに対して ANSI C++ 標準準拠の構文を強制的に使用するために定義します。 このマクロを使用すると、非標準構文を使用してメンバー関数へのポインターを初期化するときに C4867 コンパイラ エラーが生成されます。

#define _ATL_ENABLE_PTM_WARNING

解説

ATL および MFC ライブラリは、Microsoft C++ コンパイラの向上した標準 C++ への準拠と一致するように変更されました。 ANSI C++ 標準によれば、クラス メンバー関数へのポインターの構文はで &CMyClass::MyFunc ある必要があります。

_ATL_ENABLE_PTM_WARNINGが定義されていない場合 (既定のケース)、ATL/MFC はマクロ マップ (特にメッセージ マップ) で C4867 エラーを無効にして、以前のバージョンで作成されたコードを以前と同様にビルドし続けることができます。 _ATL_ENABLE_PTM_WARNINGを定義する場合、コードは C++ 標準に準拠している必要があります。

ただし、標準以外の形式は非推奨になりました。 既存のコードを C++ 標準の構文に移動する必要があります。 コード例を次に示します。

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()

次のように変更する必要があります。

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()

マップ マクロの場合は、アンパサンド '> 文字を追加します。 コードに再び文字を追加しないでください。

_ATL_FREE_THREADED

1 つ以上のオブジェクトでフリー スレッドまたはニュートラル スレッドが使用されているかどうかを定義します。

_ATL_FREE_THREADED

解説

フリー スレッドを指定します。 フリー スレッドは、マルチスレッド アパートメント モデルと同じです。 他のスレッド オプションについては、プロジェクトのスレッド モデルの指定に関する記事を参照してください。ATL オブジェクトで使用できるスレッド モデルの説明については、「オプション、ATL シンプル オブジェクト ウィザード」を参照してください。

_ATL_MODULES

permissive-を使用して ATL プロジェクトをコンパイルし、C++ モジュールで ATL を使用できます

_ATL_MODULES

_ATL_MULTI_THREADED

プロジェクトに Both、Free、Neutral としてマークされているオブジェクトがあることを示すシンボル。

_ATL_MULTI_THREADED

解説

このシンボルが定義されている場合、ATL はグローバル データへのアクセスを正しく同期するコードをプルします。 新しいコードでは、代わりに同等のマクロ _ATL_FREE_THREADED を使用する必要があります。

_ATL_NO_AUTOMATIC_NAMESPACE

ATL としての名前空間の既定の使用を禁止するシンボル。

_ATL_NO_AUTOMATIC_NAMESPACE

解説

このシンボルが定義されていない場合( atlbase.h を含む)、既定で using namespace ATL が実行されるため、名前の競合が発生する可能性があります。 これを回避するには、このシンボルを定義します。

_ATL_NO_COM_SUPPORT

COM 関連のコードがプロジェクトでコンパイルされないようにするシンボル。

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

クラスのコンストラクターとデストラクターで vtable ポインターが初期化されないようにするシンボル。

ATL_NO_VTABLE

解説

vtable ポインターがクラスのコンストラクターとデストラクターで初期化されていない場合、リンカーによって、その vtable と、それが指すすべての関数が除去される可能性があります。 __declspec(novtable) に展開します。

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

関数をインラインにしてはならないことを示すシンボル。

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

パラメーター

myfunction
インライン化すべきではない関数。

解説

ヘッダー ファイルに配置できるようにインラインとして宣言する必要がある場合でも、関数がコンパイラによってインライン化されないようにするには、このシンボルを使用します。 __declspec(noinline) に展開します。

_ATL_SINGLE_THREADED

すべてのオブジェクトで単一のスレッド モデルを使用する場合に定義します

_ATL_SINGLE_THREADED

解説

オブジェクトが常にプライマリ COM スレッドで実行されることを指定します。 他のスレッド オプションについては、プロジェクトのスレッド モデルの指定に関する記事を参照してください。ATL オブジェクトで使用できるスレッド モデルの説明については、「オプション、ATL シンプル オブジェクト ウィザード」を参照してください。

関連項目

マクロ