首页 > 解决方案 > 部分宏重定义

问题描述

我正在尝试将驱动程序移植到新应用程序。我正在寻找一种有效的方法来链接定义。

例子:

一些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

任何建议/参考表示赞赏。

标签: cmacrosembeddedporting

解决方案


更具体地说,我希望编译器将“xyz_”替换为“abc_”引用。这可能吗?

不。

我们可以通过观察您在预处理器中需要它来稍微简化一下,因为它是您要操作的宏名称,并且在预处理期间会解析这些名称。随着范围的缩小,有理由简单地通读标准的第 6.10 节,以确认尽管有将多个令牌组合为一个的机制,但没有将令牌分开或对令牌部分进行操作的机制。

根据这些标记的出现次数以及存在的其他标识符,仅执行文本搜索和替换以及随后的审查可能是可行的。也可以通过文本处理或其他工具提取旧的宏定义,并以编程方式从中生成兼容性宏定义(来源:@Jean-FrançoisFabre)。


推荐阅读