Składnie __attribute__((konstruktor)) i __attribute__((destruktor)) w C

Napisz dwie funkcje w C, używając kompilatora GCC, z których jedna jest wykonywana przed funkcją główną, a druga po funkcji głównej. Składnie specyficzne dla GCC : 1. __atrybut__((konstruktor)) składnia: Ta konkretna składnia GCC, użyta z funkcją, wykonuje tę samą funkcję przy uruchomieniu programu, tj. przed główny() funkcjonować. 2. __atrybut__((destruktor)) składnia: Ta konkretna składnia GCC, gdy jest używana z funkcją, wykonuje tę samą funkcję tuż przed zakończeniem programu przez _exit, tj. po główny() funkcjonować. Wyjaśnienie : Sposób działania konstruktorów i destruktorów polega na tym, że plik obiektów współdzielonych zawiera specjalne sekcje (.ctors i .dtors w ELF), które zawierają odniesienia do funkcji oznaczonych odpowiednio atrybutami konstruktora i destruktora. Kiedy biblioteka jest ładowana/rozładowywana, program dynamicznego modułu ładującego sprawdza, czy takie sekcje istnieją i jeśli tak, wywołuje funkcje, do których się one odwołują. Warto zwrócić uwagę na kilka punktów w tym zakresie: 1. __atrybut__((konstruktor)) działa, gdy biblioteka współdzielona jest ładowana, zwykle podczas uruchamiania programu. 2. __atrybut__((destruktor)) działa, gdy biblioteka współdzielona jest wyładowywana, zwykle przy wyjściu programu. 3. Te dwa nawiasy mają prawdopodobnie na celu odróżnienie ich od wywołań funkcji. 4. __atrybut__ jest składnią specyficzną dla GCC, a nie funkcją lub makrem. Kod sterownika : CPP
   // C program to demonstrate working of   // __attribute__((constructor)) and   // __attribute__((destructor))   #include      // Assigning functions to be executed before and   // after main()   void     __attribute__  ((  constructor  ))     calledFirst  ();   void     __attribute__  ((  destructor  ))     calledLast  ();   void     main  ()   {      printf  (  '  n  I am in main'  );   }   // This function is assigned to execute before   // main using __attribute__((constructor))   void     calledFirst  ()   {      printf  (  '  n  I am called first'  );   }   // This function is assigned to execute after   // main using __attribute__((destructor))   void     calledLast  ()   {      printf  (  '  n  I am called last'  );   }   
Output:
I am called first I am in main I am called last  
Utwórz quiz