通过一个简单的例子介绍一下gcc的__attribute__ ((constructor))属性的作用.gcc允许为函数设置__attribute__ ((constructor))和__attribute__ ((destructor))两种属性,顾名思义,就是将被修饰的函数作为构造函数或析构函数.程序员可以通过类似下面的方式为函数设置这些属性: void funcBeforeMain() __attribute__ ((constructor)); void funcAfterMain()…
1.cpp:------------------------------------------------ #include int test() __attribute__ ((constructor(101))); int test() { printf("\n--In lib--"); return 0; } test.cpp //没有call 1.cpp中方法,但是希望在main前面先执行test()函数 #include int main() { printf("…
制作一个共享库 /* a.h */ int func(); /* a.c */ #include <stdio.h> #include "a.h" int func() { printf("### func ###\n"); ; } gcc -shared -o liba.so a.c -fPIC main.c #include "a.h" int main() { func(); } gcc -o main main.c -la -…
构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数. (1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行. (2)通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用 构造函数被声明为私有有特殊的用途,这个以后再写. (3)但是可以有参数,因为有参数,故可以被重载. #ifndef TEST_H #define TEST_H class Test{ int m_i; public: Test(); Test(int i,…
我们知道当调用默认拷贝构造函数时,一个对象对另一个对象初始化时,这时的赋值时逐成员赋值.这就是浅拷贝,当成员变量有指针时,浅拷贝就会在析构函数那里出现问题.例如下面的例子: //test.h #ifndef MYSTRING_H #define MYSTRING_H class MyString { char* m_str; public: MyString(char* str=""); ~MyString(); void Display(); }; #endif //MYSTRING…
拷贝构造函数:拷贝构造函数就是在用一个类对象来创建另外一个类对象时被调用的构造函数,如果我们没有显示的提供拷贝构造函数,编译器会隐式的提供一个默认拷贝构造函数. 拷贝构造函数的定义是X(const X& ){} class Test{ int m_i; public: Test(int i):m_i(i){} Test(const Test& vt):m_i(vt.m_i){}//拷贝构造函数 int getI()const {return m_i;} }; int main(){ Tes…
(1)构造函数初始化列表: 1 class Test{ 2 int i; 3 public: 4 Test(int vi):i(vi){}//这里的从冒号开始,到右大括号结束,这一段是构造函数初始化列表 5 6 }; 构造函数的执行分为两个阶段:(1)初始化阶段  (2)普通计算阶段 初始化是我们定义一个变量,分配内存时直接给变量赋值,例如 int i=10;  而int k; k=10;这样的就不是初始化,是赋值.所以在初始化列表里面的初始化才是真正的初始化,即初始化阶段.而在构造函数内的那些…
(1)转换构造函数 转换构造函数的定义:转换构造函数就是把普通的内置类型转换成类类型的构造函数,这种构造函数只有一个参数.只含有一个参数的构造函数,可以作为两种构造函数,一种是普通构造函数用于初始化对象,一种是转换构造函数 //test.h #ifndef TEST_H #define TEST_H class Test{ int m_i; public: Test();//转换构造函数,也是普通构造函数 ~Test(); }; #endif //TEST_H //test.cpp #inclu…
本文目录 iOS宏的经典用法 Apple的习惯 __attribute__ iOS宏的经典用法 1.常量宏.表达式宏 #define kTabBarH (49.0f) #define kScreenH [UIScreen mainScreen].bounds.size.height #define isScreenWidthEqual320 (fabs([UIScreen mainScreen].bounds.size.width - 320) < DBL_EPSILON) 2.带参数的宏 //…
转来的: http://www.cnblogs.com/astwish/p/3460618.html __attribute__ 你知多少? GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧…
GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数. __attribute__ 语法格式为:__attribute__ ((attribut…
转自:http://www.cnblogs.com/astwish/p/3460618.html GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__…
转自:http://www.cnblogs.com/astwish/p/3460618.html GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__…
GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数. __attribute__ 语法格式为:__attribute__ ((attribut…
__ATTRIBUTE__ 你知多少? GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数. __attribute__ 语法格式为:__at…
本文译至: http://gcc.gnu.org/onlinedocs/gccint/Initialization.html 如我们所知,在GCC通过给代码追加__attribute__((constructor))和__attribute__((destructor))的方式能够追加初始函数和终止函数, 这篇文章介绍了GCC内部是怎样实现上述处理的. 简单的说,就是在最常常的情况下,初始函数会被追加到.ctor section中,.init会调用相应的函数处理这些初始函数.终止情况类似. --…
from:http://www.cnblogs.com/astwish/p/3460618.html __ATTRIBUTE__ 你知多少? GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧…
Linux提供了一套API来动态装载库.下面列出了这些API: - dlopen,打开一个库,并为使用该库做些准备.- dlsym,在打开的库中查找符号的值.- dlclose,关闭库.- dlerror,返回一个描述最后一次调用dlopen.dlsym,或dlclose的错误信息的字符串. C语言用户需要包含头文件dlfcn.h才能使用上述API.glibc还增加了两个POSIX标准中没有的API:- dladdr,从函数指针解析符号名称和所在的文件.- dlvsym,与dlsym类似,只是多…
GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数. __attribute__ 语法格式为:__attribute__ ((attribut…
在gcc中,可以使用attribute关键字,声明constructor和destructor,来指定了函数在main之前或之后运行,代码如下: #include <stdio.h> __attribute((constructor)) void before_main() { printf("%s/n",__FUNCTION__); } __attribute((destructor)) void after_main() { printf("%s/n"…
http://blog.csdn.net/qq_33850438/article/details/52014399 ### 导出符号------------------------------ 默认所有的函数都是导出的,gcc编译选项设置-fvisibility=hidden- 在导出函数增加属性-fvisibility=default ### 基本功能------------------------------ 可以导出函数- 具有日志功能 ### 扩展功能------------------…
The keyword format is either of the following: __attribute__((attribute1, attribute2, ...)) __attribute__((__attribute1__, __attribute2__, ...)) For example: void * Function_Attributes_malloc_0(int b) __attribute__((malloc)); static int b __attribute…
1.前言 最近看到一份代码,看到一个函数前面用__attribute__((destructor))修饰,当时感觉有点怪怪的,搜了整个程序,也没发现哪个地方调用这个函数.于是从字面意思猜想,该函数会在程序结束后自动调用,与C++中的析构函数类似.第一次接触GNU下的attribute,总结一下. 2.__attribute__介绍 __attribute__可以设置函数属性(Function Attribute).变量属性(Variable Attribute)和类型属性(Type Attrib…
1.前言 最近看到一份代码,看到一个函数前面用__attribute__((destructor))修饰,当时感觉有点怪怪的,搜了整个程序,也没发现哪个地方调用这个函数.于是从字面意思猜想,该函数会在程序结束后自动调用,与C++中的析构函数类似.第一次接触GNU下的attribute,总结一下. 2.__attribute__介绍 __attribute__可以设置函数属性(Function Attribute).变量属性(Variable Attribute)和类型属性(Type Attrib…
GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attribute ). __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数. __attribute__ 语法格式为:__attribute__ ((attribut…
公司的前辈的代码里面 结构体的花括号最后 有__attribute__((packed))字样.以前没见过,所以查了查.学习学习http://blog.sina.com.cn/s/blog_559f6ffc0101dbem.html __attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐.是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在windows下,用vc的编译器也不是紧凑的…
1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在windows下,用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的.例如: 在TC下:struct my{ char ch; int a;} sizeof(int)=2;sizeof(my)=3;(紧凑模式) 在GCC下:struct my{ char ch; in…
GNU C的一大特色就是__attribute__机制.__attribute__机制可以设置函数属性(Function Attribute).变量属性(Variable Attribute)和类型属性(Type Attribute). __attribute__语法格式为:__attribute__((attribute-list)). __attribute__对结构体(struct)或共用体(union)进行属性设置: 大致有六个参数值可以被设定,即:aligned,packed,tran…
转载:http://blog.csdn.net/ithomer/article/details/6566739 1. __attribute__ GNU C的一大特色(却不被初学者所知)就是__attribute__机制. __attribute__可以设置函数属性(Function Attribute).变量属性(Variable Attribute)和类型属性(Type Attribute) __attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attr…
GNU C的一大特色(却不被初学者所知)就是__attribute__机制.__attribute__可以设置函数属性(Function    Attribute).变量属性(Variable Attribute)和类型属性(Type Attribute). __attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数. __attribute__语法格式为: __attribute__ ((attr…