selectany
Section spécifique à Microsoft
Indique au compilateur que l'élément de données global déclaré (variable ou objet) est un COMDAT pick-any (une fonction packagée).
Syntaxe
__declspec( selectany )
declarator
Notes
Au moment d'effectuer le lien, si plusieurs définitions d'un COMDAT s'affichent, l'éditeur de liens en choisit un et ignore le reste. Si l’option /OPT:REF
Éditeur de liens (Optimisations) est sélectionnée, l’élimination COMDAT se produit pour supprimer tous les éléments de données non référencés 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 la suppression /OPT:REF. Les effets secondaires d'un tel code ne doivent pas créer de dépendances quand il n'existe aucune autre référence à des données.
Pour les objets globaux initialisés dynamiquement carte selectany
le code d’initialisation d’un objet non référencé, ainsi.
Un élément de données global ne peut généralement être initialisé qu'une seule fois dans un projet EXE ou DLL. selectany
peut être utilisé pour initialiser des données globales définies par des en-têtes, lorsque le même en-tête apparaît dans plusieurs fichiers sources. selectany
est disponible dans les compilateurs C et C++.
Remarque
selectany
ne peut être appliqué qu’à l’initialisation réelle d’éléments de données globaux visibles en externe.
Exemple : selectany
attribut
Ce code montre comment utiliser l’attribut 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);
Exemple : Utiliser l’attribut selectany
pour garantir le pliage COMDAT des données
Ce code montre comment utiliser l’attribut selectany
pour garantir le pliage COMDAT des données lorsque vous utilisez également l’option /OPT:ICF
éditeur de liens. Notez que les données doivent être marquées avec selectany
et placées dans une const
section (en lecture seule). 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;
}
FIN de la section spécifique à Microsoft
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour