使用GCC编译器在C中编写两个函数,其中一个在主函数之前执行,另一个在主函数之后执行。
特定语法 :
1. __属性(构造函数) 语法:当与函数一起使用时,这种特殊的GCC语法在程序启动时(即启动前)执行相同的函数 main() 功能。
2. __属性(析构函数) 语法:当与函数一起使用时,这个特殊的GCC语法在程序通过_exit终止之前,即在 main() 作用
解释 : 构造函数和析构函数的工作方式是,共享对象文件包含特殊的部分(.actors和.dtors on ELF),其中分别包含对用构造函数和析构函数属性标记的函数的引用。加载/卸载库时,dynamic loader程序会检查这些节是否存在,如果存在,则调用其中引用的函数。
以下几点值得注意: 1. __属性(构造函数) 加载共享库时运行,通常在程序启动期间运行。 2. __属性(析构函数) 卸载共享库时运行,通常在程序退出时运行。 3.这两个括号可能是为了将它们与函数调用区分开来。 4. __属性__ 是特定于GCC的语法;不是函数或宏。
驱动程序代码 :
// C program to demonstrate working of // __attribute__((constructor)) and // __attribute__((destructor)) #include<stdio.h> // Assigning functions to be executed before and // after main() void __attribute__((constructor)) calledFirst(); void __attribute__((destructor)) calledLast(); void main() { printf ( "I am in main" ); } // This function is assigned to execute before // main using __attribute__((constructor)) void calledFirst() { printf ( "I am called first" ); } // This function is assigned to execute after // main using __attribute__((destructor)) void calledLast() { printf ( "I am called last" ); } |
输出:
I am called first I am in main I am called last
本文由 里沙夫·拉杰 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。