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.