السلام عليكم ورحمة الله
مرحبا بكم في أخترنا لك(2)
الفهرس الرئيس لــ سلسلة أخترنا لك فى سي++
2.أستدعاء دالة قبل بدء تشغيل البرنامج Calling a Function Before Program's Startup
بعض التطبيقات تحتاج الى تشغيل دالة ما قبل ان يعمل البرنامج الرئيسي أى قبل عمل الدالة main() الرئيسة مثل عمليات سجل اﻻحداث logger وعمليات مراجعة الكمبياﻻت ... الخ، أحد الطرق المستخدمة فى ذلك هى واحدة من أفضل الخصائص (لكنها ليست معروفة) فى المترجم GCC وهي __attribute__ مع تمرير الوسيطة constructor نأخذ مثال:
#include <iostream>
using namespace std;
void beforeMain(void) __attribute__((constructor));
void beforeMain(void) {
cout << "\nbefore main\n";
}
int main() {
cout << "\ninside main \n";
return 0;
}المخرجات:
before main inside main RUN SUCCESSFUL (total time: 193ms)
بما أن الحديث كان عن دالة تعمل قبل بدء البرنامج فلابد ان نفكر فى دالة تعمل بعد انتهاء البرنامج بنفس الفكرة السابقة وهي __attribute__ ولكن هذة المرة نمرر الوسيطة destructor نأخذ مثال يشتمل على كلا من النقطة السابقة والحالية معا :
#include <iostream>
using namespace std;
void my_ctor(void) __attribute__((constructor));
void my_dtor(void) __attribute__((destructor));
void my_ctor(void) {
cout << "hello before main()" << endl;
}
void my_dtor(void) {
cout << "bye after main()\n";
}
int main(void) {
cout << "hello\n";
return 0;
}المخرجات:
hello before main() hello bye after main() RUN SUCCESSFUL (total time: 181ms)
وهناك طرق أخري منها:
- فكرة دور حول دالة بناء كائن معلن على مستوي البرنامج.
- وايضا فكرة عن طريق المتغيرات العامة الساتيتكية globle static.
ان شاء الله نتناولها سويا او احد اﻻعضاء يتفضل مشكورا بالنقاش حولها.
والى لقاء فى تلميحة جديدة فى عالم سي و سي++






