GNU C之__attribute__
__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)
__attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数
1. 变量别名:
语法:type newname
__attribute__((alias("oldname
")));
#include <stdio.h> int oldname = 1; extern int newname __attribute__((alias("oldname"))); // declaration void foo(void) {printf("newname = %d\n", newname); // prints 1 }
2. 弱符号:
若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak属性,则这些全局符号不会引发重定义错误。链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号。当有函数或变量名可能被用户覆盖时,该函数或变量名可以声明为一个弱符号。
//模块A中调用func,但是不确定外部是否提供了该函数 ... extern int func(void);...int a = func();...如果直接这么调用,如果外部不提供该函数程序可能出现crash。所以在本模块中__attribute__((weak))就派上了用场int __attribute__((weak)) func(......){return 0;}
转载于:https://www.cnblogs.com/guxuanqing/p/11184758.html
GNU C之__attribute__相关推荐
- GNU C - Using GNU GCC __attribute__ mechanism 01 Function Attribute
近来阅读glibc源码的时候遇到很多关于__attribute__的问题,索性就查找了相关的资料,学习了一下. 要是不解决了这个问题,有的时候还真的是比较难下手.就拿glibc来说,使用xcscope ...
- __attribute__ 用法
转自:http://www.cnblogs.com/astwish/p/3460618.html GNU C 的一大特色就是__attribute__ 机制.__attribute__ 可以设置函数属 ...
- freeRtos学习笔记 (9) 移植和CPU利用率统计
freeRtos学习笔记 (9) 移植和CPU利用率统计 使用官方固件移植 首先准备一个能跑的裸机工程 注意,freertos需要使用systick定时器,而stm32HAL库默认使用systick作 ...
- stm32延时us寄存器_STM32延时函数的四种方法
关注.星标公众号,不错过精彩内容 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms().本文基于STM32F207介绍4种不同方式实现的延时函数. ...
- c++11 string u8_深入理解C++11:C++11新
一.数据对齐 在了解为什么数据需要对齐之前,我们可以回顾一下打印结构体的大小这个C/C++中的经典案例.先看代码: #include using namespace std; struct HowMa ...
- iar stm32_STM32延时函数的四种方法
关注.星标公众号,不错过精彩内容 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms().本文基于STM32F207介绍4种不同方式实现的延时函数. ...
- STM32 IIC详解
目录 1.IIC定义 2.IIC协议规范 2.1 SDA和SCL信号 2.2 数据有效性 2.3 开始和结束信号 2.4 字节格式 2.5 从机地址和读写位 3.计算IIC的频率 4.PCF85 ...
- STM32延时函数的四种方法
目录 1.普通延时 2.定时器中断 3.查询定时器 4.汇编指令 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms().本文基于STM32F207 ...
- [zz]GNU C __attribute__ 机制简介
GNU C的一大特色(却不被初学者所知)就是__attribute__机制.__attribute__可以设置函数属性(Function Attribute).变量属性(Variable Attrib ...
最新文章
- Uncaught SyntaxError: Unexpected token
- 查询当前Oracle数据库的实例
- bitmap格式分析
- DropDownList实现可输入可选择
- Java多线程--synchronized修饰普通方法和修饰静态方法的区别
- phpstorm9 增加对.vue的支持
- VS中标志寄存器表示
- php通过实现excel导入,php实现excel导入数据
- 【转】hive简介安装 配置常见问题和例子
- MP288MP280清零软件
- 【翻译】steam离线时通过局域网游玩L4D2(求生之路2)
- 单层感知器与线性神经网络
- 两种求矩阵伪逆的方法
- 一个让人不得不转的故事-《通宵达旦工资只有3200 博客网架构师艰难浪迹于北京》...
- 《成为乔布斯》读后感
- tkinter中控件menu的两种组织方法
- (读书笔记)蔡康永的说话之道
- 12个免费logo生成器
- 【ML】什么是数据标准化和归一化?应用场景是什么?
- HTML 笔记/案例