Share via


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

__declspec
Kata kunci