Поделиться через


selectany

Только для систем Microsoft

Сообщает компилятору, что объявленный глобальный элемент данных (переменная или объект) выбор-любое упакованная функции COMDAT ().

__declspec( selectany ) declarator

Заметки

Во время соединения, если несколько определений COMDAT видны, то компоновщик выбирает один и отменяет остальные.Если параметр компоновщика /OPT: REF (Оптимизации), то возникнет исключение COMDAT, чтобы удалить все элементы в выходных данных компоновщика неиспользуемая данных.

Конструкторы и назначения глобальный функцией или статическими методами в объявлении не создает ссылку и не помешают нахождению /OPT: исключение REF.Побочные эффекты от того кода должно зависеть от при отсутствии других ссылок к данным не существуют.

Для динамического инициализированных, глобальных объектов selectany отменяет код инициализации неиспользуемая объекта.

Глобальный элемент данных может быть нормально инициализировать только один раз в проект EXE или DLL.selectany может использоваться при инициализации глобальные данные, указанные в заголовках, если такой же заголовок отображается в более чем один файл-источник.selectany доступен и в компиляторах c и C++.

ПримечаниеПримечание

selectany может применяться только к реальной инициализации глобальных элементов данных, которые внешне видимы.

Пример

В этом примере кода показано, как использовать 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);

В этом примере кода показано, как использовать selectany атрибут, чтобы обеспечить свертка данных COMDAT если также используются /OPT: Брандмауэр подключения к интернету параметр компоновщика.Обратите внимание, что данные должны быть отмечен атрибутом selectany и помещенные в a Const раздел (только для чтения).Необходимо явно задать только для чтения.

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

ЭЛЕМЕНТ, относящийся Майкрософт

См. также

Ссылки

__declspec

Ключевые слова C++