selectanyselectany

Microsoft SpecificMicrosoft Specific

Informuje kompilator, że element zadeklarowany danych globalnych (zmiennej lub obiektu) jest pobranie dowolnego COMDAT (spakowanych funkcji).Tells the compiler that the declared global data item (variable or object) is a pick-any COMDAT (a packaged function).

SkładniaSyntax

__declspec( selectany ) declarator

UwagiRemarks

W czasie Jeśli wiele definicji COMDAT są widoczne, konsolidator wybiera jedną i odrzuca wszystkie pozostałe.At link time, if multiple definitions of a COMDAT are seen, the linker picks one and discards the rest. Jeśli opcja konsolidatora /OPT: REF (optymalizacje) jest zaznaczone, a następnie nastąpi eliminacji COMDAT Aby usunąć wszystkie elementy danych bez odwołań w danych wyjściowych konsolidatora.If the linker option /OPT:REF (Optimizations) is selected, then COMDAT elimination will occur to remove all the unreferenced data items in the linker output.

Konstruktory i przypisania przez globalnej funkcji lub metody statyczne w deklaracji nie należy tworzyć odwołanie i nie zapobiega eliminacji/OPT: REF.Constructors and assignment by global function or static methods in the declaration do not create a reference and will not prevent /OPT:REF elimination. Efekty uboczne z takiego kodu nie powinno zależne od, gdy nie istnieją żadne inne odniesienia do danych.Side effects from such code should not be depended on when no other references to the data exist.

W przypadku obiektów dynamicznie zainicjowany, globalne selectany spowoduje odrzucenie kod inicjujący nieużywanej obiektu, jak również.For dynamically initialized, global objects, selectany will discard an unreferenced object's initialization code, as well.

Element danych globalnych normalnie mogą być inicjowane tylko raz w projekcie EXE lub DLL.A global data item can normally be initialized only once in an EXE or DLL project. selectany mogą być używane w inicjalizacji danych globalnych, zdefiniowane przez nagłówki, gdy ten sam nagłówek pojawi się w więcej niż jednego pliku źródłowego.selectany can be used in initializing global data defined by headers, when the same header appears in more than one source file. selectany jest dostępna w kompilatorach, C i C++.selectany is available in both the C and C++ compilers.

Uwaga

selectany można stosować tylko do inicjowania rzeczywiste elementy danych globalnych, które są widoczne na zewnątrz.selectany can only be applied to the actual initialization of global data items that are externally visible.

PrzykładExample

Ten kod przedstawia sposób użycia selectany atrybutu:This code shows how to use the selectany attribute:

//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ładExample

Ten kod przedstawia sposób użycia selectany atrybutu, aby upewnić się, gdy używany jest składanie COMDAT danych /OPT: ICF — opcja konsolidatora.This code shows how to use the selectany attribute to ensure data COMDAT folding when you also use the /OPT:ICF linker option. Należy pamiętać, że dane muszą być oznaczone selectany i umieszczone w const sekcji (tylko do odczytu).Note that data must be marked with selectany and placed in a const (readonly) section. Należy jawnie określić sekcji tylko do odczytu.You must explicitly specify the read-only section.

// 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 specyficzny dla MicrosoftEND Microsoft Specific

Zobacz takżeSee also

__declspec__declspec
Słowa kluczoweKeywords