c - 在 Eclipse 的宏中无效使用宏粘贴

标签 c eclipse macros c51

您好,我遇到了以下问题:

  • IDE:Eclipse 版本:2018-12 (4.10.0),带有 Keil C51 插件(用于 语言映射)
  • 编译器(外部):Wickenhäuser uc51

这里的问题:Eclipse 错误的字符序列

Keil 语言映射使用的是这种语法:

xdata unsigned char Port = 0x1;

Wickenhäuser 略有不同:

xdata unsigned char Port @ 0x1;

所以我想到了这个可行的解决方案:

#ifdef __CDT_PARSER__
    xdata unsigned char Port = 0x1;
#else
    //xdata unsigned char Port @ 0x1; //BAD Character Squence encountered: @
    #define AT_ADDRESS(n) @##n //Using this Macro to get around this problem
    xdata unsigned char Port_B AT_ADDRESS(0x1);
#endif

但是这个解决方案并不完美,(双写等等)应该是这样的:

#ifdef __CDT_PARSER__ //In Keil I have to define this too, to make use the Keil syntax
    //#define AT_ADDRESS(n) // This works
    #define AT_ADDRESS(n) =##n // Gives error
#else
    #define AT_ADDRESS(n) @##n
#endif

xdata unsigned char Port_B AT_ADDRESS(0x1); // GIVES ERROR: Invalid use of macro pasting in macro AT_ADDRESS

不幸的是,Eclipse 标记了这一点:在宏 AT_ADDRESS 中无效使用宏粘贴

最佳答案

此时您不需要粘贴。只需更换

#define AT_ADDRESS(n) =##n

通过

#define AT_ADDRESS(n) = n

扩展的 C 版本也是如此,您显示的两个“扩展”示例都在地址符号和实际地址之间插入了一个空格字符,因此:

#ifdef __CDT_PARSER__ //In Keil I have to define this too, to make use the Keil syntax
    #define AT_ADDRESS(n) = n
#else
    #define AT_ADDRESS(n) @ n
#endif

关于c - 在 Eclipse 的宏中无效使用宏粘贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54813115/

相关文章:

c - 解析为参数的前 N ​​个字符的宏

macros - 使用 Racket 生成日志信息

c - NaN 在运行时如何保存?

c - 如何写入/dev/kmsg?

c++ - unsigned关键字会影响sizeof的结果吗?

java - 更新 Maven 项目内部错误 - ReferencedComponentXMIResourceImpl cannot be cast to JptXmlResource

c - 最后带有额外参数的宏?

c++ - Solaris 配置文件解析器

java - 在另一个项目的属性文件中引用另一个项目的目录

java - 在 Eclipse IDE 中运行不带包的 Java 代码