Syntaxe
[C++]#pragma package(smart_init)
#pragma package(smart_init, weak)
Description : smart_init argument
#pragma package(smart_init) garantit l'initialisation des unit�s packag�es dans l'ordre d�termin� par leurs d�pendances. Incluse par d�faut dans le fichier source d'un package. Typiquement, vous utilisez #pragma package pour les fichiers .CPP construits comme des packages.
Cette directive pragma affecte l'ordre d'initialisation de l'unit� de compilation. Pour les unit�s, l'initialisation se produit dans l'ordre suivant :
1. Selon leur d�pendances "d'usage". Ainsi, si l'unit�A d�pend de l'unit�B, l'unit�B doit �tre initialis�e avant l'unit�A.
2. Selon l'ordre de lien.
3. Selon l'ordre de priorit� dans l'unit�.
Pour les fichiers objet normaux (ceux non construits comme des unit�s), l'initialisation se produit d'abord en fonction de l'ordre de priorit� puis de l'ordre de lien. La modification de l'odre de lien des fichiers objet modifie l'ordre dans lequel les constructeurs d'objets globaux sont appel�s.
Les exemples suivants illustrent en quoi l'initialisation des unit�s diff�re de celle des fichiers objet normaux.
Supposons trois fichiers unit�, A, B et C, initialis�s de fa�on "intelligente" avec #pragma package(smart_init) et ont les valeurs de priorit� (d�finies par le param�tre de priorit� de #pragma startup) 10, 20 et 30. Les noms des fonctions sont d�termin�s par leur valeur de priorit� et le fichier objet parent : a10, a20, a30, b10, etc.
Puisque les trois fichiers sont des unit�s, et en supposant que A utilise B et C et que l'ordre de lien est A, B puis C, l'ordre d'initialisation est :
B10 B20 B30 C10 C20 C30 A10 A20 A30
S'il s'agissait de fichiers objet, et non d'unit�s, l'ordre serait :
A10 B10 C10 A20 B20 C20 A30 B30 C30
Toutes les r�f�rences #pragma link � d'autres fichiers objet � partir d'un fichier .cpp utilisant et d�clarant #pragma package(smart_init) doivent aussi �tre r�solues par une unit�. Les r�f�rences #pragma link � des fichiers non objet peuvent n�anmoins �tre r�solues par des biblioth�ques, etc.
Description : weak packages
La directive #pragma package(smart_init, weak) affecte la mani�re dont un fichier objet est stock� dans les fichiers .bpi et .bpl d'un package. Si #pragma package(smart_init, weak) appara�t dans un fichier d'unit�, le compilateur ne place pas l'unit� dans les fichiers bpl si c'est possible, et il cr�e une copie locale non empaquet�e de l'unit� si elle est n�cessaire � une autre application ou un autre package. Une unit� compil�e avec cette directive est dite faiblement empaquet�e.
#pragma package(smart_init, weak) est utilis�e pour �liminer les conflits entre packages pouvant d�pendre de la m�me biblioth�que externe.
Les fichiers d'unit�s contenant la directive #pragma package(smart_init, weak) ne doivent pas contenir de variables globales.
Pour de plus amples informations, voir la rubrique Faible packaging.
Partager