Escreva duas funções em C usando o compilador GCC, uma das quais é executada antes da função principal e a outra é executada após a função principal. Sintaxes específicas do GCC : 1. __atributo__((construtor)) sintaxe: Esta sintaxe específica do GCC, quando usada com uma função, executa a mesma função na inicialização do programa, ou seja, antes principal() função. 2. __attribute__((destruidor)) sintaxe: Esta sintaxe específica do GCC, quando usada com uma função, executa a mesma função logo antes do programa terminar por meio de _exit, ou seja, depois principal() função. Explicação : A forma como os construtores e destruidores funcionam é que o arquivo de objeto compartilhado contém seções especiais (.ctors e .dtors no ELF) que contêm referências às funções marcadas com os atributos construtor e destruidor, respectivamente. Quando a biblioteca é carregada/descarregada, o programa carregador dinâmico verifica se tais seções existem e, em caso afirmativo, chama as funções nelas referenciadas. Alguns pontos a respeito são dignos de nota: 1. __atributo__((construtor)) é executado quando uma biblioteca compartilhada é carregada normalmente durante a inicialização do programa. 2. __attribute__((destruidor)) é executado quando a biblioteca compartilhada é descarregada normalmente na saída do programa. 3. Presumivelmente, os dois parênteses servem para distingui-los das chamadas de função. 4. __atributo__ é uma sintaxe específica do GCC; não uma função ou macro. Código do motorista : 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
Criar questionário