Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Specyficzne dla firmy Microsoft
Informuje kompilator, że zadeklarowany globalny element danych (zmienna lub obiekt) jest wybraną dowolną funkcją COMDAT (spakowana).
Składnia
__declspec( selectany )Declarator
Uwagi
Jeśli w czasie połączenia jest widocznych wiele definicji comDAT, konsolidator wybiera jeden i odrzuca resztę. Jeśli wybrano opcję /OPT:REF konsolidatora (optymalizacje), wówczas eliminacja COMDAT zostanie wykonana w celu usunięcia wszystkich nieużywanych elementów danych w danych wyjściowych konsolidatora.
Konstruktory i przypisania według funkcji globalnej lub metod statycznych w deklaracji nie tworzą odwołania i nie uniemożliwiają eliminacji /OPT:REF. Skutki uboczne takiego kodu nie powinny być zależne od tego, kiedy nie istnieją żadne inne odwołania do danych.
W przypadku dynamicznie inicjowanych obiektów globalnych selectany również odrzuci kod inicjowania obiektu bez wnioskowania.
Globalny element danych może być zwykle inicjowany tylko raz w projekcie EXE lub DLL.
selectany Można użyć w inicjowaniu danych globalnych zdefiniowanych przez nagłówki, gdy ten sam nagłówek pojawia się w więcej niż jednym pliku źródłowym.
selectany jest dostępny zarówno w kompilatorach C, jak i C++.
Uwaga
selectany można zastosować tylko do rzeczywistej inicjalizacji globalnych elementów danych, które są widoczne zewnętrznie.
Przykład: selectany atrybut
Ten kod pokazuje, jak używać atrybutu selectany :
//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);
Przykład: użyj selectany atrybutu, aby zapewnić składanie danych COMDAT
Ten kod pokazuje, jak używać atrybutu selectany w celu zapewnienia składania danych COMDAT podczas korzystania z opcji konsolidatora /OPT:ICF . Należy pamiętać, że dane muszą być oznaczone selectany i umieszczone w const sekcji (readonly). Musisz jawnie określić sekcję tylko do odczytu.
// 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;
}
Koniec specyfiki Microsoftu