C'de __attribute__((constructor)) ve __attribute__((destructor)) sözdizimleri

GCC derleyicisini kullanarak C'ye biri ana fonksiyondan önce, diğeri ana fonksiyondan sonra çalışan iki fonksiyon yazın. GCC'ye özgü söz dizimleri : 1. __öznitelik__((yapıcı)) sözdizimi: Bu özel GCC sözdizimi, bir işlevle birlikte kullanıldığında, programın başlangıcında, yani program başlangıcında aynı işlevi yürütür. ana() işlev. 2. __öznitelik__((yıkıcı)) sözdizimi: Bu özel GCC sözdizimi, bir işlevle birlikte kullanıldığında, program _exit aracılığıyla sonlandırılmadan hemen önce aynı işlevi yürütür, yani sonra ana() işlev. Açıklama : Oluşturucuların ve yıkıcıların çalışma şekli, paylaşılan nesne dosyasının sırasıyla yapıcı ve yıkıcı öznitelikleriyle işaretlenmiş işlevlere referanslar içeren özel bölümler (ELF'de .ctors ve .dtors) içermesidir. Kütüphane yüklendiğinde/boşaltıldığında, dinamik yükleyici programı bu tür bölümlerin mevcut olup olmadığını kontrol eder ve eğer varsa burada referans verilen işlevleri çağırır. Bunlarla ilgili birkaç noktayı belirtmekte yarar var: 1. __öznitelik__((yapıcı)) genellikle program başlatma sırasında paylaşılan bir kitaplık yüklendiğinde çalışır. 2. __öznitelik__((yıkıcı)) paylaşılan kitaplık genellikle program çıkışında kaldırıldığında çalışır. 3. İki parantez muhtemelen onları işlev çağrılarından ayırmak içindir. 4. __bağlanmak__ GCC'ye özgü bir sözdizimidir; bir işlev veya makro değildir. Sürücü kodu : 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  
Test Oluştur