码迷,mamicode.com
首页 > 其他好文 > 详细

__attribute__((constructor))

时间:2017-08-05 15:38:20      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:ons   attribute   int   hello   clu   log   typedef   rgs   des   

构造与析构:


#include <stdio.h> #include <stdlib.h> static __attribute__((constructor)) void before() { printf("Hello"); } static __attribute__((destructor)) void after() { printf(" World!\n"); } int main(int args,char ** argv) { printf("main"); return EXIT_SUCCESS; } ~

 

[root@workstation2017 ~]# ./test.out
Hellomain World!

 

 

优先级:

[root@workstation2017 ~]# vi test.c

#include <stdio.h>
#include <stdlib.h>


static  __attribute__((constructor(101))) void begin101()
{

    printf("Hello-101\n");
}

static  __attribute__((constructor(102))) void begin102()
{

    printf("Hello-102\n");
}


static  __attribute__((destructor(150))) void end101()
{
    printf(" World!-101\n");
}

static  __attribute__((destructor(151))) void end102()
{
    printf(" World!-102\n");
}

int main(int args,char ** argv)
{

    return EXIT_SUCCESS;
}

 

[root@workstation2017 ~]# ./test.out
Hello-101
Hello-102
 World!-102
 World!-101

 

对齐属性:

__attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐

[root@workstation2017 ~]# vi test.c

#include <stdio.h>
#include <stdlib.h>
#define __u8    unsigned char
#define __u16   unsigned short

struct str_struct{
        __u8    a;
        __u8    b;
        __u8    c;
        __u16   d;
} __attribute__ ((packed));

typedef struct {
        __u8    a;
        __u8    b;
        __u8    c;
        __u16   d;
} __attribute__ ((packed)) str;

typedef struct {
        __u8    a;
        __u8    b;
        __u8    c;
        __u16   d;
}str_temp __attribute__ ((packed));

typedef struct {
        __u8    a;
        __u8    b;
        __u8    c;
        __u16   d;
}str_nopacked;

int main(void)
{
        printf("sizeof str = %d\n", sizeof(str));
        printf("sizeof str_struct = %d\n", sizeof(struct str_struct));
        printf("sizeof str_temp = %d\n", sizeof(str_temp));
        printf("sizeof str_nopacked = %d\n", sizeof(str_nopacked));
        return 0;
}

 

[root@workstation2017 ~]# ./test.xx
sizeof str = 5
sizeof str_struct = 5
sizeof str_temp = 6
sizeof str_nopacked = 6

 

__attribute__((constructor))

标签:ons   attribute   int   hello   clu   log   typedef   rgs   des   

原文地址:http://www.cnblogs.com/zengkefu/p/7290195.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!