Принцип работы атрибутов функции constructor/destructor
Code:
#include <cstdio>
void func1();
void func2();
void func3();
void __attribute__((constructor)) func1();
void __attribute__((constructor)) func2();
void __attribute__((destructor)) func3();
void func1()
{
printf("Inside func1()\n");
}
void func2()
{
printf("Inside func2()\n");
}
void func3()
{
printf("Inside func3()\n");
}
int main()
{
printf("Inside main()\n");
return 0;
}
Интересует вопрос, почему constructor/destructor выполняют свою роль, не находясь в функции main(), правильно ли я понимаю, что они обязательны в выполнении, даже не находясь в main?
Почему вывод выглядит таким образом? (compiler GCC):
Inside func1() Inside func2() Inside main() Inside func3()
Я сначало подумал, мол деструктор выполняется в конце, а main ближе всё-же к конструктору (пускай это и глупо), но если снести func3(), а destructor присвоить func2() то вывод будет:
Inside func1()
Inside func2()
Inside main()
Ответы (1 шт):
Вообще то это не с++ и никакой не конструктор и не деструктор. Это расширение gcc. https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Function-Attributes.html
Функции, которые помечены такими аттрибутами будут выполняться до и после main соответственно. Компилятор сам вставит их вызовы неявно в нужное место.
Интересует вопрос, почему constructor/destructor выполняют свою роль, не находясь в функции main(), правильно ли я понимаю, что они обязательны в выполнении, даже не находясь в main?
а потому что это не с++:). И компилятор вставит их вызовы сам.
Почему вывод выглядит таким образом? (compiler GCC):
потому что конструкторы до main, деструкторы - после.
Я сначало подумал, мол деструктор выполняется в конце, а main ближе всё-же к конструктору (пускай это и глупо), но если снести func3(), а destructor присвоить func2() то вывод будет:
нет, он будет такой , что вполне ожидаемо.
Inside func1()
Inside main()
Inside func2()