selectany
Spécifique à Microsoft
Indique au compilateur que l'élément de données globale déclaré (variable objet ou) est un sélection-tout COMDAT (une fonction packagée).
__declspec( selectany ) declarator
Notes
Au moment de la liaison, si plusieurs définitions d'un COMDAT s'affichent, les sélections une d'éditeur de liens et ignore le reste.Si l'option de l'éditeur de liens /OPT : REF (optimisations) est sélectionnée, l'élimination COMDAT se produira pour supprimer tous les éléments de données non référencée dans la sortie de l'éditeur de liens.
Les constructeurs et l'assignation par fonction globale ou méthodes statiques dans la déclaration ne créent pas de référence et n'empêchent pas /OPT : Suppression de CURSOR.Des effets secondaires d'un tel code ne doivent pas être dépendus sur lorsque autre référence aux données n'existe pas.
Pour les objets dynamiquement initialisés et globaux, selectany ignore le code d'initialisation d'un objet non référencées, également.
Un élément de données globale peut généralement être initialisé qu'une seule fois dans un projet EXE ou DLL.selectany peut être utilisé en initialisant les données globales définies par les en-têtes, lorsque le même en-tête apparaît dans plusieurs fichiers source.selectany est disponible dans les compilateurs C et C++.
[!REMARQUE]
selectany peut s'appliquer qu'à l'initialisation réelle des éléments de données globaux qui sont visibles.
Exemple
ce code montre comment utiliser l'attribut d' 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);
Ce code indique comment utiliser l'attribut d' selectany pour garantir le repli COMDAT des données lorsque vous utilisiez également l'option de l'éditeur de liens /OPT : ICF .Notez que les données doivent être marquées avec selectany et être placées dans une section (lecture seule) de const .Vous devez spécifier explicitement la section en lecture seule.
// 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;
}
détail de FIN Microsoft