Open Watcom C 1.9宏编译报E1009错误,求修复方案
Open Watcom C 1.9宏编译错误E1009的修复方案
使用Open Watcom C 1.9编译以下代码时触发语法错误:
第一段代码:
#define XP_DIR __cdecl #define t_dec(m,n) t_##m##n #define d_1(t,n,b,e) EXTERN ALIGN CONST XP_DIR t n[256] d_1(uint8_t, t_dec(i,box), isb_data, h0);
编译第二段代码时也出现完全相同的错误:
d_1(uint8_t, t_ibox, isb_data, h0);
报错信息如下:
Error! E1009: Expecting ',' or ';' but found 't_ibox'
注:参数b、e未使用是因为要禁用表构建。
问题原因
Open Watcom C 1.9的预处理器对宏参数解析的语法规则较为严格,同时调用约定修饰符__cdecl(即XP_DIR)的放置位置不符合该编译器的语法要求——它被放在了类型和变量名之间,而正确的位置应该是在声明的最前端。
修复方案
调整
d_1宏中XP_DIR的位置,将其移到声明的最前面,符合编译器对调用修饰符的语法规范:// 原宏定义 #define d_1(t,n,b,e) EXTERN ALIGN CONST XP_DIR t n[256] // 修改后的宏定义 #define d_1(t,n,b,e) XP_DIR EXTERN ALIGN CONST t n[256]对于包含嵌套宏的调用
d_1(uint8_t, t_dec(i,box), isb_data, h0);,确认t_dec(i,box)展开后的t_ibox是合法标识符即可,配合上述宏调整后就能正常编译。如果仍有问题,可直接替换为展开后的标识符调用:d_1(uint8_t, t_ibox, isb_data, h0);。
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

