Рубрики

Синтаксисы __attribute __ ((конструктор)) и __attribute __ ((деструктор)) в C

Напишите две функции на C, используя компилятор GCC, одна из которых выполняется перед основной функцией, а другая — после основной.

GCC специфичные синтаксисы :

1. Синтаксис __attribute __ ((конструктор)) : этот конкретный синтаксис GCC, когда используется с функцией, выполняет ту же функцию при запуске программы, то есть перед функцией main () .

2. Синтаксис __attribute __ ((деструктор)) : этот конкретный синтаксис GCC, когда используется с функцией, выполняет ту же функцию непосредственно перед завершением программы через _exit, то есть после функции main () .

Пояснение :
Работа конструкторов и деструкторов заключается в том, что общий объектный файл содержит специальные разделы (.ctors и .dtors в ELF), которые содержат ссылки на функции, помеченные соответственно атрибутами конструктора и деструктора. Когда библиотека загружается / выгружается, программа динамического загрузчика проверяет, существуют ли такие разделы, и, если это так, вызывает функции, на которые есть ссылки.

Несколько замечаний по этому поводу стоит отметить:
1. __attribute __ ((конструктор)) запускается при загрузке разделяемой библиотеки, обычно во время запуска программы.
2. __attribute __ ((деструктор)) запускается, когда разделяемая библиотека выгружается, как правило, при выходе из программы.
3. Две скобки, по-видимому, отличаются от вызовов функций.
4. __attribute__ — это специфический синтаксис GCC, а не функция или макрос.

Код драйвера :

// C программа для демонстрации работы
// __attribute __ ((конструктор)) и
// __attribute __ ((деструктор))
#include<stdio.h>

  
// Назначение функций для выполнения до и
// после main ()

void __attribute__((constructor)) calledFirst();

void __attribute__((destructor)) calledLast();

  

void main()

{

    printf("\nI am in main");

}

  
// Эта функция назначена для выполнения до
// главное используя __attribute __ ((конструктор))

void calledFirst()

{

    printf("\nI am called first");

}

  
// Эта функция назначена для выполнения после
// главное использование __attribute __ ((деструктор))

void calledLast()

{

    printf("\nI am called last");

}

Выход:

I am called first
I am in main
I am called last

Эта статья предоставлена Ришав Радж . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Синтаксисы __attribute __ ((конструктор)) и __attribute __ ((деструктор)) в C

0.00 (0%) 0 votes