448 votes

Comment fonctionne exactement __attribut__((constructeur)) ?

Il semble assez clair qu'il est censé mettre les choses en place.

  1. Quand est-ce qu'il fonctionne exactement ?
  2. Pourquoi y a-t-il deux parenthèses ?
  3. Est __attribute__ une fonction ? Une macro ? Une syntaxe ?
  4. Cela fonctionne-t-il en C ? C++ ?
  5. La fonction avec laquelle il fonctionne doit-elle être statique ?
  6. Quand est-ce que __attribute__((destructor)) courir ?

Exemple en Objective-C :

__attribute__((constructor))
static void initialize_navigationBarImages() {
  navigationBarImages = [[NSMutableDictionary alloc] init];
}

__attribute__((destructor))
static void destroy_navigationBarImages() {
  [navigationBarImages release];
}

1voto

drlolly Points 139

Voici un autre exemple concret, celui d'une bibliothèque partagée. La fonction principale de cette bibliothèque partagée est de communiquer avec un lecteur de carte à puce. Mais elle peut également recevoir des "informations de configuration" au moment de l'exécution par le biais d'udp. L'udp est géré par un thread qui MUST être lancé au moment de l'init.

__attribute__((constructor))  static void startUdpReceiveThread (void) {
    pthread_create( &tid_udpthread, NULL, __feigh_udp_receive_loop, NULL );
    return;

  }

La bibliothèque a été écrite en c.

2 votes

Un choix étrange si la bibliothèque est écrite en C++, puisque les constructeurs de variables globales ordinaires sont la manière idiomatique d'exécuter du code pré-main en C++.

0 votes

@NicholasWilson La bibliothèque était en fait écrite en c. Je ne sais pas comment j'ai tapé c++ au lieu de c.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X