#pragma exit et #pragma startup

De RAD Studio
Aller à : navigation, rechercher

Remonter à Présentation des directives pragma - Index


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.

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

Voir aussi