c - 部分宏重定义
问题描述
我正在尝试将驱动程序移植到新应用程序。我正在寻找一种有效的方法来链接定义。
例子:
一些CommonHeader.h
#define abc_1234 0x01
#define abc_5678 0x02
#define abc_9012 0x03
oldApplication.c
U8 x1,x2,x3;
x1 = abc_1234 ;
x2 = abc_5678 ;
x3 = abc_9012 ;
在新应用程序中,“abc_”替换为“xyz_”
新应用程序.c
x1 = xyx_1234;
x2 = xyz_5678;
x3 = xyz_9012;
当然我可以这样做:
兼容性标头.h
#define xyx_1234 abc_1234
#define xyz_5678 abc_5678
#define xyz_9012 abc_9012
但是,我正在寻找是否有其他方法。更具体地说,我希望编译器将“xyz_”替换为“abc_”引用。这可能吗?
细节:
HW:嵌入式系统/微控制器编译器:gcc 编程语言:C
任何建议/参考表示赞赏。
解决方案
更具体地说,我希望编译器将“xyz_”替换为“abc_”引用。这可能吗?
不。
我们可以通过观察您在预处理器中需要它来稍微简化一下,因为它是您要操作的宏名称,并且在预处理期间会解析这些名称。随着范围的缩小,有理由简单地通读标准的第 6.10 节,以确认尽管有将多个令牌组合为一个的机制,但没有将令牌分开或对令牌部分进行操作的机制。
根据这些标记的出现次数以及存在的其他标识符,仅执行文本搜索和替换以及随后的审查可能是可行的。也可以通过文本处理或其他工具提取旧的宏定义,并以编程方式从中生成兼容性宏定义(来源:@Jean-FrançoisFabre)。
推荐阅读
- unity3d - Unity 3d 粒子未在游戏视图中显示
- verification - Yosys 和 JasperGold 如何比较?
- java - 如何通过 Swagger UI 为所有 API 发送请求标头(Origin)
- react-native - 如何在 react native 项目中解决此问题 - “npm ERR!Invalid tag name ">=^16.8.1"” 这个问题?
- flask - 烧瓶应用程序中未显示 Flash 消息
- mongodb - 对集合进行分片的正确方法以及如何解释结果
- node.js - 如何使用用户名和密码以及每个流媒体密钥保护节点媒体服务器管理面板 - 节点媒体服务器
- python - Python Moviepy 模块 - 当我将多个视频(具有不同的纵横比和帧速率)组合成一个视频时,视频已损坏
- flutter - 将位置数据从后台服务发送到 Flutter 中的前台屏幕
- javascript - 如何将 GIF 帧转换为 spritesheet