C语言 : weak_alias描述

2023-05-16

weak-alias

  • 是一个宏,其目的是为函数添加一个”弱”别名,与”强”符号函数名区分。
  • 说明, 如果调用函数无对应的函数无”强”符号对应的函数,则会调用该别名对应的函数
  • C/C++ 函数调用是以编译后的”符号”做索引调用,详情了解 <符号表>
//macro weak_alias
#define weak_alias(name, aliasname) _mweak_alias(name, aliasname)
#define _weak_alias(name, aliasname) \
extern __typeof(name) aliasname __attribute__((weak, alias(#name)));
//macro weak_alias end

  • 所谓”强”符号函数名就是,普通声明定义的函数对应的函数名
    例如:
//strong.c
#include <stdio.h>
void print_hello(const char *s)
{
printf("print_hello: %s\n", s);
}
//strong.c end

print_hello 就是一个”强”函数符号


以下测试两种情况

__weak_hello 有两个”弱符号”
print_hello 有对应的实体函数 而 print_world 则无
//weak.c
#include <stdio.h>
void print_hello(const char *s) __attribute__((weak, alias("__weak_hello")));
void print_world(const char *s) __attribute__((weak, alias("__weak_hello")));
void __weak_hello(const char *)
{
printf("__weak_hello: %s\n", s);
}
//weak.c end
//main.c
int main(void)
{
print_hello("main test print_hello");
print_world("main test print_world");
return 0;
}
//main.c end
  • 编译运行测试
    $ gcc strong.c weak.c main.c && ./a.out
    print_hello: main test print_hello
    __weak: main test print_world
    $
可见 当调用函数有对应的”强”符号,则调用,若无则会尝试寻找其”weak”对应的函数,若再无则编译会报错 找不到该函数

End

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言 : weak_alias描述 的相关文章

  • GCC 对弱 const 变量的优化错误

    我有一种奇怪的感觉gcc处理事情时的行为弱常量变量在不同的优化级别 即 O0 or O1 这是代码 def h 声明 const int var int copy int do copy void weak c weak var定义 do
  • 什么是“别名”流缓冲区?

    什么是 别名流缓冲区 我在评论中遇到了这个词answer https stackoverflow com questions 3318714 check if ostream object is cout or ofstream c 331
  • 我应该使用alias还是alias_method?

    我发现了一篇博客文章alias vs alias method 如该博客文章中给出的示例所示 我只想将一个方法别名为同一类中的另一个方法 我应该使用哪个 我总是看到alias用过 但是有人告诉我alias method更好 别名的使用 cl
  • 值构造函数的别名

    是否可以为值构造函数定义别名 上下文是这样的 我正在编写一个程序 它将原始递归函数实现为图灵机 为此 我正在使用一元整数编码 我的图灵机类型定义如下 definition of a Turing machine data TuringMac
  • C++ 11 模板,参数包的别名

    在个人项目中我有这样的事情 template
  • 带有位置参数的 Git 别名

    基本上我正在尝试别名 git files 9fa3 执行命令 git diff name status 9fa3 9fa3 但 git 似乎没有将位置参数传递给别名命令 我努力了 alias files git diff name stat
  • 从自定义子查询中选择列名称/别名的列表

    在 Oracle 中 有没有办法选择带有别名的自定义查询返回的所有列 举个例子 假设我们有一个如下查询 SELECT FIRST NAME AS COL1 LAST NAME AS COL2 ADDRESS AS COL3 FROM PEO
  • java泛型协方差

    我无法理解以下文章 http www ibm com developerworks java library j jtp01255 html https web archive org web 20161204181636 https ww
  • 在 WHERE 子句中使用别名

    我有一个查询 旨在显示表 A 中最近尚未更新的任何行 每行应在 month no 之后的 2 个月内更新 SELECT A identifier A name TO NUMBER DECODE A month no 1 200803 2 2
  • 从程序集中公开不同的类型名称(别名)

    这个问题与一个相关我之前未回答的问题 https stackoverflow com q 22097706 409279 因为我仍在解决同样的问题 但这是一种不同的方法 我目前正在 C NET 项目中使用第三方 SOAP Web 服务 不幸
  • MySQL:使用另一个表中的值作为列别名?

    我们有一张非常时髦的表格 我试图从中得到一个描述性的结果集 该表存储紧密相关但不同的数据类型集合 并且有意义的列 名称 存储在单独的表中 我认为展示比解释更容易 一个简化和抽象的例子 CREATE TABLE IF NOT EXISTS s
  • 在不违反标准的情况下使用指向结构的指针对数组进行别名

    Reading this http cellperformance beyond3d com articles 2006 06 understanding strict aliasing html我理解 如果结构具有兼容的成员 则可以为结构
  • SELECT 语句的 SQL 别名

    我想做类似的事情 SELECT FROM AS my select WHERE id IN SELECT MAX id FROM my select GROUP BY name 是否可以以某种方式执行 AS my select 部分 即为
  • 命令/别名可以是变量吗?

    我需要时不时地查看日志文件的特定行 head 10 log txt tail 1 to view line 10 of log txt 然后我写了一个函数v in my bashrc让生活更轻松 v 10 好吧 也许我在这里有点吹毛求疵 我
  • 如何覆盖 .bash_aliases 中设置的别名

    我喜欢使用 bash 别名来自定义 bash 命令 有没有办法覆盖 bash 别名设置 或者我应该将别名重命名为与原始命令不同的名称 例如 我的 bash aliases 包括 alias ls ls ltr 如果我只想检索文件名 是否需要
  • Haskell 使用什么类型的范围?

    我试图弄清楚 Haskell 是否使用动态或静态作用域 我意识到 例如 如果您定义 let x 10 然后定义函数 let square x x x 您有 2 个不同的 x 这是否意味着它是动态作用域的 如果不是 它使用什么范围 为什么 另
  • Powershell 删除项目无法从函数中运行

    我需要将别名 cd 替换为名为 cd 的函数 我尝试从函数中删除别名 但没有成功 以下是一个简单的测试脚本 function remove alias get command cd Remove Item Path Alias cd get
  • Oracle SQL 一次选择中的非唯一表别名

    有人知道为什么这适用于两个表别名 x 吗 Select x company name x employee name FROM company x JOIN employee x ON x company id 5 我知道 id 5 的 J
  • 正确别名向量

    我无法在其他地方找到答案 所以我想我只需要问这个 我正在尝试获取向量 其中存储 int 指针 的别名 如下所示 void conversion Engine ENGINES The Engine class has a vector of
  • 如何在 TypeScript React 项目中使用 eslint import 插件启用绝对路径别名?

    我已经安装了eslint plugin import到我的项目 我的目标是使用 import no relative parent imports error 设置禁止在我的项目中进行相对导入以增强可读性 但是 此设置会在我的项目中产生错误

随机推荐

  • 美女福利图片API接口,免费好用

    1 前言 美女图片福利查询接口 xff0c 能获取一些青春靓女的图片 xff0c 拿来做一些demo非常合适 查看接口完整信息 xff1a https www idmayi com doc detail id 61 15 2 接口明细 注意
  • 文本情感倾向分析API

    一 前言 文本情感倾向分析API xff0c 对带有情感色彩的主观性文本进行分析 处理 归纳和推理 二 接口文档 应用场景 商品评论的分析 电影或电视剧的评论分析 大众舆论导向分析 人物的情绪分析 人物关系分析 产品的比较分析 对某一个事件
  • 语音通知 API

    一 前言 语音通知API xff0c 通过系统发起电话直呼并播放通知内容 支持静态和动态语音 xff0c 可自定义通知内容 二 接口文档 特性 语音专线主动呼叫用户 xff0c 解决短信拦截等无法收到短信验证痛点 文本识别文本智能语音转化
  • 银行卡OCR API

    一 前言 银行卡OCR API xff0c 可以自动定位银行卡图片区域 xff0c 支持识别银行卡正面信息 xff0c 包含银行卡号 银行卡类型 银行名称等信息 二 应用场景 金融远程身份认证 使用身份证OCR和银行卡OCR实现用户信息的自
  • Centos7系统使用kubeadm方式安装k8s集群v1.26.1版本

    kubeadm方式安装k8s集群 一 准备机器 主机说明192 168 0 11master节点 xff0c 能连外网 xff0c 官网最低要求2核2G192 168 0 12node1节点 xff0c 能连外网 xff0c 官网最低要求2
  • 使用PIL和几种分类算法对标准数字图片进行识别

    详细代码见GitHub https github com nickliqian simple number recognition simple number recognition 使用PIL和几种分类算法对标准数字图片进行识别 背景 在
  • windows10修改子系统ubuntu安装路径

    1 查看当前安装的子系统版本 wsl l v 2 导出子系统文件到d盘 wsl export Ubuntu d ubuntu tar 3 注销当前子系统 wsl unregister Ubuntu 4 重新导入子系统到d盘 wsl impo
  • 字节高频题补充 检测循环依赖

    和 力扣207 课程表 相似 循环依赖检测 如 xff0c 39 A 39 39 B 39 39 B 39 39 C 39 39 C 39 39 D 39 39 B 39 39 D 39 61 gt false xff0c 39 A 39
  • 解决Python模块导入出现ModuleNotFoundError: No module named ‘***’的问题

    Python的模块非常多 xff0c 在安装这些模块的时候 xff0c 由于安装方法的不同 xff08 pip easyinstall xff09 xff0c 在python加载这些包时 xff0c 出现ModuleNotFoundErro
  • centos7端口管理

    1 开放端口 firewall cmd zone 61 public add port 61 5672 tcp permanent 开放5672端口 firewall cmd zone 61 public remove port 61 56
  • Rust安装后执行第一个程序遇到的问题

    当按照 https kaisery github io trpl zh cn ch01 02 hello world html 学习教程编写第一个Helloworld 执行rustc命令后汇报如下错误 G rustspace gt rust
  • 构建openvidu-loadtest工具-问题记录

    docker中创建ubuntu22 04的容器 xff0c 编译openvidu loadtest xff0c 遇到以下问题 xff0c 做备忘以便日后翻看 问题1 执行apt update更新镜像源库时发生错误 xff1a Updates
  • linux下-bash: ***: command not found解决办法

    今天在阿里云虚拟机上配置环境时出现 bash command not found错误 xff0c 网上找了一下 xff0c 方法如下 xff1a 如输入ls 出现 bash ls command not found ipconfig 出现
  • vue websocket 实现页面实时刷新

    vue websocket 实现页面实时刷新 最近公司项目需求后台web端要做实时能看到用户的登录状态以及所在位置 xff0c 说白了就是要做数据实时刷新 直接上代码吧 xff01 lt DOCTYPE html gt lt html la
  • Java 位运算详解

    目录 一 Java中支持的位运算 二 位运算规则 三 逻辑运算 xff08 一 xff09 与运算 xff08 amp xff09 一 运算规则 二 运算流程 xff08 二 xff09 或运算 xff08 xff09 一 运算规则 二 运
  • manjaro连接远程服务器

    不用下再window里面的类似XShell xff0c 只需要直接连就行 但是在ubuntu里面需要开启SSH服务 xff0c 再前边的文章里面有 xff0c 这篇只针对manjaro ssh username 64 100 100 100
  • GitLab创建SSH Key 过程

    1 首先你需要在github上或者gitlab上建立了自己的账户 xff0c 项目组已经将你加入了group 2 打开git bash xff0c 输入命令 ls al ssh xff0c 如果提示 xff0c ls cannot acce
  • wls2 ubuntu设置固定IP地址,并实现开机启动

    wls2 ubuntu设置固定IP地址 xff0c 并实现开机启动 64 echo off setlocal enabledelayedexpansion wsl shutdown Ubuntu 20 04 wsl u root d Ubu
  • 使用cmake调用swig生成库,Python调用C/C++

    前言 xff1a 项目中使用构建工具是cmake xff0c 为了集成我们的系统进去 xff0c 需要使用cmake来调用swig xff0c 然后swig生成python可执行的库 我的环境 xff1a win10swig 4 0 2py
  • C语言 : weak_alias描述

    weak alias 是一个宏 xff0c 其目的是为函数添加一个 弱 别名 xff0c 与 强 符号函数名区分 说明 如果调用函数无对应的函数无 强 符号对应的函数 xff0c 则会调用该别名对应的函数C C 43 43 函数调用是以编译