यहां हम देखेंगे कि कैसे एक कोड लिखा जाए जहां दो फ़ंक्शन मौजूद हों, और एक फ़ंक्शन main फ़ंक्शन से पहले निष्पादित हो, और दूसरा फ़ंक्शन main फ़ंक्शन के बाद निष्पादित हो। इन विशेषताओं का उपयोग main को निष्पादित करने से पहले कुछ स्टार्टअप कार्य करने के लिए और main को निष्पादित करने के बाद कुछ क्लीनअप कार्य करने के लिए किया जाता है।
इस कार्य को करने के लिए हमें इन दो फ़ंक्शन के लिए attribute लगाना होगा। जब attribute कंस्ट्रक्टर attribute होता है, तो यह main() से पहले निष्पादित होगा, और जब attribute डिस्ट्रक्टर प्रकार का होता है, तो यह main() पूरा होने के बाद निष्पादित होगा।
हम GCC फ़ंक्शन का उपयोग कर रहे हैं। फ़ंक्शन __attribute__() है। इस मामले में हम __attribute__() फ़ंक्शन के साथ दो अलग-अलग विकल्पों का उपयोग कर रहे हैं: कंस्ट्रक्टर और डिस्ट्रक्टर। सिंटैक्स __attribute__((constructor)) का उपयोग प्रोग्राम शुरू होने पर फ़ंक्शन को निष्पादित करने के लिए किया जाता है। और सिंटैक्स __attribute__((destructor)) का उपयोग main() फ़ंक्शन पूरा होने पर फ़ंक्शन को निष्पादित करने के लिए किया जाता है। बेहतर समझ के लिए उदाहरण देखें।
उदाहरण
#include <stdio.h>
void before_main() __attribute__((constructor));
void after_main() __attribute__((destructor));
void before_main() {
printf("यह main से पहले निष्पादित होता है।\n");
}
void after_main() {
printf("यह main के बाद निष्पादित होता है।");
}
int main() {
printf("main के अंदर\n");
}
आउटपुट
यह main से पहले निष्पादित होता है। main के अंदर यह main के बाद निष्पादित होता है।