Udostępnij za pośrednictwem


selectany

Programu Microsoft

Informuje kompilator, że element zadeklarowanych danych globalnych (zmiennej lub obiektu) jest pobranie jakichkolwiek COMDAT (funkcja pakowane).

__declspec( selectany ) declarator

Uwagi

W czasie łącza Jeśli wiele definicji COMDAT są widoczne, program łączący wybiera jeden i odrzuca pozostałe.Jeśli opcja linker /OPT:REF (optymalizacje) jest zaznaczone, a następnie COMDAT eliminacji nastąpi usunięcie wszystkich elementów danych nieużywane w danych wyjściowych linker.

Konstruktory i przydziału, funkcja globalna lub metody statyczne w deklaracji nie utworzyć odwołanie i nie zapobiega /OPT:REF eliminacji.Efekty uboczne, z takim kodzie powinny zależne nie, gdy istnieją inne odwołania do danych.

Dla obiektów dynamicznie zainicjowany, globalny selectany spowoduje odrzucenie kod inicjujący nieużywane obiektu, jak również.

W programie project plik EXE lub DLL elementu danych globalnych mogą być inicjowane zwykle tylko raz.selectanymogą być używane w inicjowania danych globalnych, zdefiniowane przez nagłówki, gdy ten sam nagłówek pojawi się w więcej niż jeden plik źródłowy.selectanyjest dostępna w kompilatorów c i C++.

[!UWAGA]

selectanymożna stosować tylko do rzeczywistego inicjowanie elementy danych globalnych, które są widoczne z zewnątrz.

Przykład

Ten kod ilustruje sposób użycia selectany atrybut:

//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);

Ten kod ilustruje sposób użycia selectany atrybut do zapewnienia składanie COMDAT danych, gdy używany /OPT:ICF opcja programu łączącego.Należy zauważyć, że dane muszą być oznaczone selectany i umieszczony w const sekcji (tylko do odczytu).Należy jawnie określić sekcji 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 Microsoft szczególne

Zobacz też

Informacje

__declspec

Słów kluczowych języka C++