selectany
Khusus Microsoft
Memberi tahu pengkompilasi bahwa item data global yang dideklarasikan (variabel atau objek) adalah COMDAT pick-any (fungsi paket).
Sintaks
__declspec( selectany )
declarator
Keterangan
Pada waktu tautan, jika beberapa definisi COMDAT terlihat, linker memilih satu dan membuang sisanya. Jika opsi /OPT:REF
linker (Pengoptimalan) dipilih, maka penghapusan COMDAT akan terjadi untuk menghapus semua item data yang tidak direferensikan dalam output linker.
Konstruktor dan penugasan dengan fungsi global atau metode statis dalam deklarasi tidak membuat referensi dan tidak akan mencegah penghapusan /OPT:REF. Efek samping dari kode tersebut tidak boleh bergantung pada ketika tidak ada referensi lain ke data yang ada.
Untuk objek global yang diinisialisasi secara dinamis, selectany
akan membuang kode inisialisasi objek yang tidak direferensikan juga.
Item data global biasanya dapat diinisialisasi hanya sekali dalam proyek EXE atau DLL. selectany
dapat digunakan dalam menginisialisasi data global yang ditentukan oleh header, ketika header yang sama muncul di lebih dari satu file sumber. selectany
tersedia di kompilator C dan C++.
Catatan
selectany
hanya dapat diterapkan ke inisialisasi aktual item data global yang terlihat secara eksternal.
Contoh: selectany
atribut
Kode ini menunjukkan cara menggunakan selectany
atribut :
//Correct - x1 is initialized and externally visible
__declspec(selectany) int x1=1;
//Incorrect - const is by default static in C++, so
//x2 is not visible externally (This is OK in C, since
//const is not by default static in C)
const __declspec(selectany) int x2 =2;
//Correct - x3 is extern const, so externally visible
extern const __declspec(selectany) int x3=3;
//Correct - x4 is extern const, so it is externally visible
extern const int x4;
const __declspec(selectany) int x4=4;
//Incorrect - __declspec(selectany) is applied to the uninitialized
//declaration of x5
extern __declspec(selectany) int x5;
// OK: dynamic initialization of global object
class X {
public:
X(int i){i++;};
int i;
};
__declspec(selectany) X x(1);
Contoh: Gunakan selectany
atribut untuk memastikan pelipatan COMDAT data
Kode ini menunjukkan cara menggunakan selectany
atribut untuk memastikan pelipatan COMDAT data saat Anda juga menggunakan /OPT:ICF
opsi linker. Perhatikan bahwa data harus ditandai dengan selectany
dan ditempatkan di const
bagian (baca saja). Anda harus secara eksplisit menentukan bagian baca-saja.
// selectany2.cpp
// in the following lines, const marks the variables as read only
__declspec(selectany) extern const int ix = 5;
__declspec(selectany) extern const int jx = 5;
int main() {
int ij;
ij = ix + jx;
}
END Khusus Microsoft
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk