logo

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('nI am in main'); } // This function is assigned to execute before // main using __attribute__((constructor)) void calledFirst() {  printf('nI am called first'); } // This function is assigned to execute after // main using __attribute__((destructor)) void calledLast() {  printf('nI am called last'); } 
Output:
I am called first I am in main I am called last 
Test Oluştur