Schreiben Sie zwei Funktionen in C mit dem GCC-Compiler, von denen eine vor der Hauptfunktion und die andere nach der Hauptfunktion ausgeführt wird. GCC-spezifische Syntaxen : 1. __attribute__((Konstruktor)) Syntax: Diese spezielle GCC-Syntax führt bei Verwendung mit einer Funktion dieselbe Funktion beim Start des Programms aus, d. h. vorher hauptsächlich() Funktion. 2. __attribute__((destruktor)) Syntax: Diese spezielle GCC-Syntax führt bei Verwendung mit einer Funktion dieselbe Funktion aus, kurz bevor das Programm durch _exit beendet wird, d. h. danach hauptsächlich() Funktion. Erläuterung : Die Funktionsweise von Konstruktoren und Destruktoren besteht darin, dass die gemeinsam genutzte Objektdatei spezielle Abschnitte (.ctors und .dtors bei ELF) enthält, die Verweise auf die Funktionen enthalten, die mit den Konstruktor- bzw. Destruktorattributen gekennzeichnet sind. Beim Laden/Entladen der Bibliothek prüft das dynamische Ladeprogramm, ob solche Abschnitte vorhanden sind und ruft gegebenenfalls die darin referenzierten Funktionen auf. Einige diesbezügliche Punkte sind erwähnenswert: 1. __attribute__((Konstruktor)) Wird ausgeführt, wenn eine gemeinsam genutzte Bibliothek geladen wird, normalerweise während des Programmstarts. 2. __attribute__((destruktor)) Wird ausgeführt, wenn die gemeinsam genutzte Bibliothek normalerweise beim Beenden des Programms entladen wird. 3. Die beiden Klammern dienen vermutlich der Unterscheidung von Funktionsaufrufen. 4. __Attribut__ ist eine GCC-spezifische Syntax, keine Funktion oder ein Makro. Treibercode : 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
Quiz erstellen