[TOC]

函数属性 attribute((constructor))和attribute((destructor))

1)函数属性功能

__attribute__ ((constructor)):会使函数在 main()函数之前执行

__attribute__ ((destructor)):会使函数在 main()函数之后执行

2)功能范围

函数属性__attribute__((constructor))__attribute__((destructor))在可执行文件或者库文件里都可以生效

3)与全局变量比较

全局变量对象的构造函数和析构函数分别在__attribute__((constructor))__attribute__((destructor))标志的函数之前调用。

4)PRIORITY 优先级

__attribute__((constructor(PRIORITY)))
__attribute__((destructor(PRIORITY)))

__attribute__((constructor)) 按照优先级小到大执行, __attribute__((destructor(PRIORITY))) 则是从大到小执行。

注意: 1、可执行程序或库文件都可以使用此属性修饰函数 2、同一个可执行程序或库文件允许多个函数被修饰,执行顺序由代码编写顺序或编译链接顺序有关

DBL_EPSILON 和 FLT_EPSILON

主要用于单精度和双精度的比较当中:

    double a = 0.5;
    if (a == 0.5) { //正确
        x++;
    }

    double b = sin(M_PI / 6.0);
    if (b == 0.5) { //可能错误
        x++;
    }

第一个比较正确,第二个可能正确也可能错误,b==0.5的结果取决于处理器、编译器的版本和设置。比如 Visual C++ 2010 编译器编译后运行b的值为0.49999999999999994

一种正确的比较方法应该是这样的:

    double b = sin(M_PI / 6.0);
    if (fabs(b - 0.5) < DBL_EPSILON) {
        x++;
    }

EPSILON 是最小误差。如果整数值减去浮点数值误差低于DBL_EPSILON,则说明该数可以近似看成整数,否则则是浮点数。( fabs()函数是一个求绝对值的函数)

Copyright © iHTCboy.com 2020-08-08 18:31:22 更新

results matching ""

    No results matching ""