#pragma exit et #pragma startup
Remonter à Présentation des directives pragma - Index
Sommaire
Syntaxe (voir Pseudo-grammaire)
#pragma startup FUNC [NN] #pragma exit FUNC [NN]
Description
Ces deux pragmas permettent au programme de spécifier des fonctions qui doivent être appelées soit lors du lancement du programme (avant l'appel de la fonction main), soit lors de la sortie du programme (juste avant l'appel à _exit).
Le nom de fonction spécifié doit être une fonction déclarée précédemment ; elle ne doit pas accepter d'argument et doit renvoyer void ; en d'autres mots, elle devrait être déclarée comme :
void myfunc(void);
Le #pragma
devrait donc être :
#pragma startup myfunc
Spécification de la priorité
Le paramètre de priorité facultatif (NN
) doit être un entier compris entre 64 et 255 :
- La priorité la plus élevée est 0.
- Les fonctions avec des priorités supérieures sont les premières appelées au démarrage et les dernières en sortie.
- Si aucune priorité n'est spécifiée, la valeur par défaut est 100 dans BCC32 et dans les compilateurs C++ améliorés par Clang.
Avertissement : N'utilisez pas de valeurs de priorité inférieures à 64 avec BCC32. Les priorités entre 0 et 63 sont réservées aux mécanismes de démarrage et de fermeture de la RTL. L'exception pour les compilateurs C++ améliorés par Clang est décrite ci-dessous.
Ordre d'initialisation des unités dans les applications construites avec les compilateurs C++ améliorés par Clang
-
- Remarque : L'ordre d'initialisation des unités devrait avoir préséance sur l'ordre
#pragma startup
, mais il n'est pas actuellement implémenté pour les compilateurs C++ améliorés par Clang.
- Remarque : L'ordre d'initialisation des unités devrait avoir préséance sur l'ordre
Les compilateurs C++ améliorés par Clang n'utilisent pas l'ordre d'initialisation des unités. En conséquence, les routines de sortie qui sont exécutées sans spécification de priorité se ferment avant la fermeture de la fiche principale. Si vous utilisez les compilateurs C++ basés sur Clang, vous devez spécifier la routine de sortie #pragma exit
avec une priorité de 30 afin de garantir que la routine de sortie est exécutée après __ExitVCL (et pour être conforme au comportement de BCC32). Par exemple :
#pragma exit myfunc 30