Bagikan melalui


Makro Opsi Pengkompilasi

Makro ini mengontrol fitur pengkompilasi tertentu.

Makro Deskripsi
_ATL_ALL_WARNINGS Simbol yang memungkinkan kesalahan dalam proyek yang dikonversi dari versi ATL sebelumnya.
_ATL_APARTMENT_THREADED Tentukan apakah satu atau beberapa objek Anda menggunakan utas apartemen.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS Membuat konstruktor tertentu CString eksplisit, mencegah konversi yang tidak disengaja.
_ATL_ENABLE_PTM_WARNING Tentukan makro ini untuk memerlukan sintaks standar C++. Ini menghasilkan kesalahan kompilator C4867 ketika sintaksis nonstandar digunakan untuk menginisialisasi penunjuk ke fungsi anggota.
_ATL_FREE_THREADED Tentukan apakah satu atau beberapa objek Anda menggunakan utas bebas atau netral.
_ATL_MODULES Memungkinkan Anda mengkompilasi proyek ATL dengan permisif- dan menggunakan ATL dengan modul C++.
_ATL_MULTI_THREADED Simbol yang menunjukkan proyek memiliki objek yang ditandai sebagai Keduanya, Bebas atau Netral. Makro _ATL_FREE_THREADED harus digunakan sebagai gantinya.
_ATL_NO_AUTOMATIC_NAMESPACE Simbol yang mencegah penggunaan namespace default sebagai ATL.
_ATL_NO_COM_SUPPORT Simbol yang mencegah kode terkait COM dikompilasi dengan proyek Anda.
ATL_NO_VTABLE Simbol yang mencegah penunjuk vtable diinisialisasi di konstruktor dan destruktor kelas.
ATL_NOINLINE Simbol yang menunjukkan fungsi tidak boleh di-inlin.
_ATL_SINGLE_THREADED Tentukan apakah semua objek Anda menggunakan model utas tunggal.

_ATL_ALL_WARNINGS

Simbol yang memungkinkan kesalahan dalam proyek yang dikonversi dari versi ATL sebelumnya.

#define _ATL_ALL_WARNINGS

Keterangan

Sebelum Visual C++ .NET 2002, ATL menonaktifkan banyak peringatan dan membiarkannya dinonaktifkan sehingga tidak pernah muncul dalam kode pengguna. Khususnya:

  • Ekspresi kondisi c4127 adalah konstanta

  • C4786 'pengidentifikasi' : pengidentifikasi dipotong menjadi karakter 'angka' dalam informasi debug

  • Ekstensi C4201 nonstandar yang digunakan : struct/union tanpa nama

  • C4103 'filename' : digunakan #pragma pack untuk mengubah perataan

  • C4291 'deklarasi' : tidak ada penghapusan operator yang cocok yang ditemukan; memori tidak akan dibebaskan jika inisialisasi melemparkan pengecualian

  • C4268 'pengidentifikasi' : 'const' data statis/global yang diinisialisasi dengan konstruktor default yang dihasilkan kompilator mengisi objek dengan nol

  • Kode C4702 tidak dapat dijangkau

Dalam proyek yang dikonversi dari versi sebelumnya, peringatan ini masih dinonaktifkan oleh header pustaka.

Untuk mengubah perilaku ini, tambahkan baris berikut ke pch.h file (stdafx.h di Visual Studio 2017 dan yang lebih lama) sebelum menyertakan header pustaka.

#define _ATL_ALL_WARNINGS

Jika ini #define ditambahkan, header ATL berhati-hati untuk mempertahankan status peringatan ini sehingga tidak dinonaktifkan secara global (atau jika pengguna secara eksplisit menonaktifkan peringatan individual, untuk tidak mengaktifkannya).

Proyek baru memiliki set ini #define dalam pch.h (stdafx.h di Visual Studio 2017 dan yang lebih lama) secara default.

_ATL_APARTMENT_THREADED

Tentukan apakah satu atau beberapa objek Anda menggunakan utas apartemen.

_ATL_APARTMENT_THREADED

Keterangan

Menentukan utas apartemen. Untuk opsi lain, dan deskripsi model utas yang tersedia untuk objek ATL, lihat Menentukan Model dan Opsi Utas Proyek, Wizard Objek Sederhana ATL.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Membuat konstruktor tertentu CString eksplisit, mencegah konversi yang tidak disengaja.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Keterangan

Ketika konstruktor ini didefinisikan, semua CString konstruktor yang mengambil satu parameter dikompilasi dengan kata kunci eksplisit, yang mencegah konversi implisit argumen input. Ini berarti, misalnya, bahwa ketika _UNICODE didefinisikan, jika Anda mencoba menggunakan char* string sebagai CString argumen konstruktor, hasil kesalahan kompilator. Gunakan makro ini dalam situasi di mana Anda perlu mencegah konversi implisit antara jenis string sempit dan lebar.

Dengan menggunakan _T makro pada semua argumen string konstruktor, Anda dapat menentukan _ATL_CSTRING_EXPLICIT_CONSTRUCTORS dan menghindari kesalahan kompilasi terlepas dari apakah _UNICODE ditentukan.

_ATL_ENABLE_PTM_WARNING

Tentukan makro ini untuk memaksa penggunaan sintaksis sesuai standar ANSI C++ untuk fungsi penunjuk ke anggota. Menggunakan makro ini menyebabkan kesalahan pengkompilasi C4867 dihasilkan ketika sintaks nonstandar digunakan untuk menginisialisasi penunjuk ke fungsi anggota.

#define _ATL_ENABLE_PTM_WARNING

Keterangan

Pustaka ATL dan MFC telah diubah agar sesuai dengan kesuaian C++ standar kompilator Microsoft C++ yang ditingkatkan. Menurut standar ANSI C++, sintaks penunjuk ke fungsi anggota kelas harus &CMyClass::MyFunc.

Ketika _ATL_ENABLE_PTM_WARNING tidak ditentukan (kasus default), ATL/MFC menonaktifkan kesalahan C4867 dalam peta makro (terutama peta pesan) sehingga kode yang dibuat di versi sebelumnya dapat terus dibuat seperti sebelumnya. Jika Anda menentukan _ATL_ENABLE_PTM_WARNING, kode Anda harus sesuai dengan standar C++.

Namun, formulir nonstandard telah ditolak. Anda perlu memindahkan kode yang ada ke sintaks standar C++. Misalnya, kode berikut:

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

Harus diubah menjadi:

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

Untuk makro peta, tambahkan karakter '&' ampersand. Anda tidak boleh menambahkan karakter lagi dalam kode Anda.

_ATL_FREE_THREADED

Tentukan apakah satu atau beberapa objek Anda menggunakan utas bebas atau netral.

_ATL_FREE_THREADED

Keterangan

Menentukan utas gratis. Utas gratis setara dengan model apartemen multithread. Lihat Menentukan Model Utas Proyek untuk opsi utas lainnya, dan Opsi, Wizard Objek Sederhana ATL untuk deskripsi model utas yang tersedia untuk objek ATL.

_ATL_MODULES

Memungkinkan Anda mengkompilasi proyek ATL dengan permissive- dan menggunakan ATL dengan modul C++.

_ATL_MODULES

_ATL_MULTI_THREADED

Simbol yang menunjukkan proyek memiliki objek yang ditandai sebagai Keduanya, Bebas atau Netral.

_ATL_MULTI_THREADED

Keterangan

Jika simbol ini ditentukan, ATL menarik kode yang akan menyinkronkan akses ke data global dengan benar. Kode baru harus menggunakan makro _ATL_FREE_THREADED yang setara sebagai gantinya.

_ATL_NO_AUTOMATIC_NAMESPACE

Simbol yang mencegah penggunaan namespace default sebagai ATL.

_ATL_NO_AUTOMATIC_NAMESPACE

Keterangan

Jika simbol ini tidak ditentukan, termasuk atlbase.h performa using namespace ATL secara default, yang dapat menyebabkan konflik penamaan. Untuk mencegah hal ini, tentukan simbol ini.

_ATL_NO_COM_SUPPORT

Simbol yang mencegah kode terkait COM dikompilasi dengan proyek Anda.

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

Simbol yang mencegah penunjuk vtable diinisialisasi di konstruktor dan destruktor kelas.

ATL_NO_VTABLE

Keterangan

Jika penunjuk vtable dicegah diinisialisasi di konstruktor dan destruktor kelas, linker dapat menghilangkan vtable dan semua fungsi yang ditunjukkannya. Memperluas ke __declspec(novtable).

Contoh

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

Simbol yang menunjukkan fungsi tidak boleh di-inlin.

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

Parameter

myfunction
Fungsi yang tidak boleh di-inlin.

Keterangan

Gunakan simbol ini jika Anda ingin memastikan fungsi tidak di-inlin oleh pengkompilasi, meskipun harus dideklarasikan sebagai sebaris sehingga dapat ditempatkan dalam file header. Memperluas ke __declspec(noinline).

_ATL_SINGLE_THREADED

Tentukan apakah semua objek Anda menggunakan model utas tunggal

_ATL_SINGLE_THREADED

Keterangan

Menentukan bahwa objek selalu berjalan di utas COM utama. Lihat Menentukan Model Utas Proyek untuk opsi utas lainnya, dan Opsi, Wizard Objek Sederhana ATL untuk deskripsi model utas yang tersedia untuk objek ATL.

Lihat juga

Macro