• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 博客專欄

    EEPW首頁 > 博客 > __attribute__中constructor和destructor

    __attribute__中constructor和destructor

    發布人:電子禪石 時間:2022-03-16 來源:工程師 發布文章

    1、前言

      最近看到一份代碼,看到一個函數前面用__attribute__((destructor))修飾,當時感覺有點怪怪的,搜了整個程序,也沒發現哪個地方調用這個函數。于是從字面意思猜想,該函數會在程序結束后自動調用,與C++中的析構函數類似。第一次接觸GNU下的attribute,總結一下。

    2、__attribute__介紹

      __attribute__可以設置函數屬性(Function Attribute)、變量屬性(Variable Attribute)和類型屬性(Type Attribute)。__attribute__前后都有兩個下劃線,并且后面會緊跟一對原括弧,括弧里面是相應的__attribute__參數

      __attribute__語法格式為:__attribute__ ( ( attribute-list ) )

      若函數被設定為constructor屬性,則該函數會在main()函數執行之前被自動的執行。類似的,若函數被設定為destructor屬性,則該函數會在main()函數執行之后或者exit()被調用后被自動的執行。例如下面的程序:



    #include <stdio.h>
    #include <stdlib.h>
    static int * g_count = NULL;
    __attribute__((constructor)) void load_file()
    {
        printf("Constructor is called.\n");
        g_count = (int *)malloc(sizeof(int));
        if (g_count == NULL)
        {
        fprintf(stderr, "Failed to malloc memory.\n");
        }
    }
    __attribute__((destructor)) void unload_file()
    {
        printf("destructor is called.\n");
        if (g_count)
        free(g_count);
    }
    int main()
    {
        return 0;
    }

    程序執行結果如下:



    3、參考****

      關于__attribute__的更多更加詳細的介紹可以參考:

    http://blog.csdn.net/polisan/article/details/5031142

    http://blog.csdn.net/ithomer/article/details/6566739

    GCC __attribute__((constructor)|(destructor))

    在閱讀TGTD的代碼時發現了一個非常詭異的問題,聲明了一個空的全局數組,在使用的時候卻發現數組非空,在main()入口時數組已經非空.數組時在什么地方被賦值了呢?最后發現__attribute__這個東東在起作用,類似于全局變量類的構造函數在main()前被調用.

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

    __attribute__中constructor和destructor - AlanTu - 博客園 (cnblogs.com)


    *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



    關鍵詞: gcc

    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 饶平县| 陆丰市| 石景山区| 台北县| 手机| 大庆市| 泾源县| 巢湖市| 松滋市| 广元市| 福清市| 岑巩县| 宁安市| 耿马| 马龙县| 阿荣旗| 楚雄市| 邵东县| 甘孜县| 木里| 扎赉特旗| 富宁县| 岗巴县| 临西县| 静乐县| 桐梓县| 读书| 巴南区| 定南县| 汾阳市| 佛坪县| 元氏县| 泸西县| 调兵山市| 安阳县| 聂拉木县| 余姚市| 买车| 七台河市| 陈巴尔虎旗| 巫山县|