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

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

マクロ 説明
_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 制限の緩い 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 (stdafx.h Visual Studio 2017 以前の) ファイルに次の行を追加します。

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

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

_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

ATL プロジェクトをコンパイルし、C++ モジュールで permissive-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

解説

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

_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 シンプル オブジェクト ウィザード」を参照してください。

関連項目

マクロ