如何解决解决 #define 与结构成员冲突
在预先存在的代码中,我有一些#define指向像这样的位域:
#define OUT0 PORT1.DR.B1
#define OUT1 PORT1.DR.B4
我需要在 cpp 文件中添加一个具有此名称的结构:
struct {
unsigned char OUT0: 1;
unsigned char OUT1: 1;
unsigned char OUT2: 1;
unsigned char OUT3: 1;
unsigned char OUT4: 1;
unsigned char OUT5: 1;
unsigned char OUT6: 1;
unsigned char OUT7: 1;
} expander;
显然编译器向我发出错误信号,因为预处理器替换了扩展器结构中的 OUT0 和 OUT1。
我不能更改结构成员的名称,因为它们必须与它管理的产品的标签一致。
显而易见的解决方案是将成员的名称更改为以下内容:
struct {
unsigned char OUT0_: 1;
unsigned char OUT1_: 1;
unsigned char OUT2_: 1;
unsigned char OUT3_: 1;
unsigned char OUT4_: 1;
unsigned char OUT5_: 1;
unsigned char OUT6_: 1;
unsigned char OUT7_: 1;
} expander;
但这些 '_' ,最后,真的很可怕。
(如果 PORT1.DR.B1 和 PORT1.DR.B4 不是位域,我可以用常量指针替换 #defines:
unsigned char * const OUT0 = &PORT1.DR.B1;
unsigned char * const OUT1 = &PORT1.DR.B4;
但这也是不可能的,因为它们是位域)
还有其他解决办法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。