博客專欄

        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

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 苏州市| 门头沟区| 琼中| 保定市| 襄城县| 东阳市| 英吉沙县| 通江县| 彝良县| 万源市| 奇台县| 东光县| 额尔古纳市| 香格里拉县| 湟中县| 正定县| 广德县| 西盟| 若羌县| 大埔县| 泰州市| 开鲁县| 邮箱| 长沙县| 新巴尔虎左旗| 马尔康县| 佛冈县| 银川市| 肇州县| 莎车县| 开封市| 大港区| 新密市| 双流县| 托克逊县| 徐水县| 惠安县| 漳浦县| 保康县| 威远县| 英德市|