selectany
Microsoft'a Özgü
Derleyiciye bildirilen genel veri öğesinin (değişken veya nesne) bir pick-any COMDAT (paketlenmiş işlev) olduğunu bildirir.
Sözdizimi
__declspec( selectany )
Bildiricisi
Açıklamalar
Bağlantı zamanında, bir COMDAT'ın birden çok tanımı görülürse, bağlayıcı birini seçer ve kalanları atar. Bağlayıcı seçeneği /OPT:REF
(İyileştirmeler) seçiliyse bağlayıcı çıktısında başvurulmayan tüm veri öğelerini kaldırmak için COMDAT eleme işlemi gerçekleşir.
Bildirimde genel işleve veya statik yöntemlere göre oluşturucular ve atama bir başvuru oluşturmaz ve /OPT:REF ortadan kaldırılmasını engellemez. Bu tür kodlardan gelen yan etkiler, verilere başka başvuru olmadığında bağımlı olmamalıdır.
Dinamik olarak başlatılan genel nesneler için, selectany
başvurulmayan bir nesnenin başlatma kodunu da atar.
Genel veri öğesi normalde bir EXE veya DLL projesinde yalnızca bir kez başlatılabilir. selectany
, üst bilgiler tarafından tanımlanan genel verilerin başlatılmasında, aynı üst bilgi birden fazla kaynak dosyada görüntülendiğinde kullanılabilir. selectany
hem C hem de C++ derleyicilerinde kullanılabilir.
Dekont
selectany
yalnızca dışarıdan görünen genel veri öğelerinin gerçek başlatmasına uygulanabilir.
Örnek: selectany
öznitelik
Bu kod özniteliğinin selectany
nasıl kullanılacağını gösterir:
//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);
Örnek: COMDAT'ın katlandığından emin olmak için özniteliğini kullanın selectany
Bu kod, bağlayıcı seçeneğini de kullandığınızda selectany
verilerin COMDAT katlanmasını sağlamak için özniteliğinin /OPT:ICF
nasıl kullanılacağını gösterir. Verilerin ile selectany
işaretlenmesi ve bir const
(salt okunur) bölüme yerleştirilmesi gerektiğini unutmayın. Salt okunur bölümü 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;
}
END Microsoft'a Özgü
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin