__C中的属性_((构造函数))和_属性_((析构函数))语法

使用GCC编译器在C中编写两个函数,其中一个在主函数之前执行,另一个在主函数之后执行。

null

特定语法 :

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主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享