gcc __attribute__((alias))

本文介绍C语言中使用__attribute__((alias))为函数创建别名的方法。通过一个具体示例展示了如何定义与调用函数别名,并附带源代码。

__attribute__((alias)): 为一个symbol声明一个别名


return-type newname([arguments-list]) __attribute__((alias("oldname")))

 

oldname: 原始函数名

newname: 原始函数的别名


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

void foo()
{
printf("\nInside %s\n",__FUNCTION__);
}

void _foo() __attribute__((alias("foo")));

//@Author : forest
int main(int args,char ** argv)
{
_foo();
return EXIT_SUCCESS;
}
http://www.szpxe.com/article/view/128471
http://www.cnblogs.com/respawn/archive/2012/07/09/2582548.html

转载于:https://www.cnblogs.com/moonflow/archive/2012/08/14/2637874.html

### 关于 `___attribute__` 的用法和含义 在 C 和 C++ 中,`___attribute__` 是一种 GNU 扩展语法,用于向编译器提供额外的信息或修改某些行为。它通常由 GCC 编译器支持,并允许开发者通过指定属性来优化代码性能、改进调试体验以及增强程序的安全性。 #### 属性的基本结构 `___attribute__` 的基本形式如下: ```c ___attribute__((attribute_list)) ``` 其中 `attribute_list` 表示一系列逗号分隔的属性名称及其参数。这些属性会影响声明的对象(如变量、函数或类型)的行为。 --- #### 常见用途及例子 1. **函数属性** 函数可以通过 `___attribute__` 来定义特定的行为。例如,标记某个函数不会返回 (`noreturn`) 或者总是内联展开 (`always_inline`)。 ```c void my_exit_function(void) ___attribute__((noreturn)); ``` 上述代码表示该函数一旦执行就不会再返回到调用处[^5]。 2. **变量属性** 变量也可以应用属性以改变其存储方式或其他特性。比如使用 `aligned` 属性可以让数据按照指定字节边界对齐: ```c int data ___attribute__((aligned(16))); ``` 这里指定了 `data` 应当按 16 字节对齐[^6]。 3. **类型属性** 对自定义的数据类型设置特殊处理规则也是可能的。例如创建一个新的整数类型并强制对其成员进行严格别名检查(`may_alias`): ```c typedef int new_int_type ___attribute__((may_alias)); ``` 此操作使得即使违反了严格的类型匹配原则也不会引发未定义行为[^7]。 4. **段落属性 (Section Attribute)** 将全局对象放置在一个特别命名的部分中对于嵌入式开发尤其有用: ```c int special_var ___attribute__((section(".my_section"))); ``` 把变量放入名为 `.my_section` 的部分有助于管理内存布局或者与其他硬件资源交互[^8]。 --- #### 注意事项 尽管 `___attribute__` 提供了许多强大的功能,但在实际项目中应当谨慎使用它们。因为这属于非标准扩展,在跨平台移植时可能会遇到兼容性问题。如果目标环境不支持相同的编译选项,则需要考虑替代方案或将此类依赖抽象出来以便维护。 --- ### 结合其他引用的理解补充说明 虽然上述解释主要围绕 `___attribute__` 开展讨论,但是为了更全面理解整个上下文中提到的技术概念,这里还简单提及几个相关内容作为对比学习材料: - 访问控制机制中的 `protected`: 它限定了类内部成员访问权限范围仅限本体加子代继承关系之内[^2]; - Python 的胶囊导入工具(PyCapsule_Import()): 主要服务于动态加载共享库接口场景下验证一致性需求[^3]; - TensorFlow 队列操作实例展示了张量队列取出元素过程[^4]. 以上均体现了不同编程语言各自特色化设计思路和技术实现细节差异之处. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值