我是靠谱客的博主 朴素便当,最近开发中收集的这篇文章主要介绍[C语言]__attribute__,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

      • __attribute__
        • 1、__attribute__((constructor))//在main函数之前,先执行一个函数
        • 2、__attribute__ ((aligned))
        • 3、__attribute__ ((__packed__))
        • 4、__attribute__((weak))
        • 5、__attribute__((weakref("别名")))
      • 链接

attribute

attribute_ 语法格式为:attribute ((attribute-list))

1、__attribute__((constructor))//在main函数之前,先执行一个函数

static  __attribute__((constructor(101))) void before1();//101表示优先级,如果有多个constructor的话,1~100为系统预留。优先级可以不写

2、__attribute__ ((aligned))

struct S {
 
short b[3];
 
} __attribute__ ((aligned (8))); //分配空间采用8字节对齐
//如果aligned 后面不紧跟一个指定的数字值,那么编译器将依据你的目标机器情况使用最大最有益的对齐方式。
//还可以---使用#pragma pack (value)时的指定对齐值value

3、__attribute__ ((packed))

struct packed_struct
{
     char c;
     int  i;
     struct unpacked_struct s;
}__attribute__ ((__packed__));
//成员内存分配采用紧凑模式,但是成员的成员不会采用紧凑,除非成员本身就是紧凑的

4、__attribute__((weak))

//弱符号(或弱定义) weak属性只会在静态库(.o .a )中生效,动态库(.so)中不会生效

例子:
test.h

#ifndef __RUO__
#define __RUO__
void test_func();
endif

test.c

#include<stdio.h>
void __attribute__((weak)) test_func()
{
	printf("weak func---n");
}

main.c

#include<stdio.h>
#include"test.h"
void test_func()
{
	printf("strong func---n");
}
int main()
{
	test_func();
	return 0;
}

结果: strong func—; 若不在main.c定义test_func则输出弱定义的函数内容
强定义存在则使用强定义,不存在则使用弱定义

5、__attribute__((weakref(“别名”)))

//弱引用,必须是static类型,别名要写,不然等效于weak(其实也可以直接写成weak的形式)。
例子:
test.h

#ifndef __YIN__
#define __YIN__
void test_func();
#endif

test.c

#include<stdio.h>
static __atrribute__((weakref(test))) void weak_ref();
void test_func()
{
	if(weak_ref)
		weak_ref();
	else
		printf("the weak_ref is null---n");
}

main.c

#include<stdio.h>
#include"test.h"
void test()
{
	printf("strong func---n");
}
int main()
{
	test_func();
	return 0;
}

结果:strong func—;若不定义test函数,则输出"the…null—"。
因为是静态声明,这个函数名的作用域被限定在本模块内,所以即使是我们在其他模块中定义了weak_ref函数,也无法影响到当前模块中的weak_ref函数。

链接

attribute((constructor))

Keil 字节对齐

C语言__attribute__的使用

C语言强、弱符号,强、弱引用

最后

以上就是朴素便当为你收集整理的[C语言]__attribute__的全部内容,希望文章能够帮你解决[C语言]__attribute__所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部