a
Microsoft özel
Derleyici (değişken veya nesne) bildirilen genel veri madde çekme herhangi bir comdat (paket işlevi) olduğunu söyler.
__declspec( selectany ) declarator
Notlar
Bağlantı zaman, bir comdat birden çok tanımının görülüyorsa, linker birini seçer ve kalan atar. Linker seçeneği /OPT:REF (en iyi duruma getirme) sonra comdat eleme linker çıkışında başvurulmayan veri öğeleri kaldırmak için ortaya çıkar, seçilir.
Kurucular ve genel işlevi veya bildiriminde static yöntemleri atama başvuru oluşturmayın ve /OPT:REF eleme engellemez. Verilere başka bir başvurular varken böyle kodundan yan etkileri üzerinde gerçekleşmesi değil.
Dinamik olarak başlatılmış, genel nesneler için selectany de başvurulmayan nesnenin başlatma kodu iptal edecektir.
Genel veri öğesi normalde exe ya da dll projesinde yalnızca bir kez başlatılabilir. selectanybirden fazla kaynak dosyada aynı başlığı görüntülendiğinde, üstbilgileri tarafından tanımlanan genel veri başlatılırken kullanılabilir. selectanyc ve C++ derleyiciler kullanılabilir.
Not
selectanyyalnızca dışarıdan görülebilir genel veri öğelerini gerçek başlatılması için uygulanabilir.
Örnek
Bu kodu nasıl kullanılacağını gösteren selectany özniteliği:
//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);
Bu kodu nasıl kullanılacağını gösteren selectany da kullandığınızda, veri comdat Katlama sağlamak için öznitelik /OPT:ICF linker seçeneği. Not veri ile işaretlenmesi gereken selectany ve içinde yerleştirilmiş bir const (salt okunur) bölümü. Salt okunur bölümünde açıkça belirtmeniz gerekir.
// 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;
}
SON Microsoft özel