error: expected identifier or '(' before ')' token after changing a macro
error: expected identifier or '(' before ')' token after changing a macro
在 C 程序 (u-boot) 中,为了检查程序是否运行该宏,我更改了定义状态
来自
#define debug_cond(cond, fmt, args...) \
({ \
if (cond) \
log(LOG_CATEGORY, \
(enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG), \
fmt, ##args); \
})
到
#define debug_cond(cond, fmt, args...) \
({ \
extern uint64_t myptr; \
if (cond) { \
*((uint64_t *)myptr) = 0x801; myptr+=8; \
log(LOG_CATEGORY, \
(enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG), \
fmt, ##args); \
}
}) <==== line 267
并且编译给了我这个错误信息。
In file included from include/linux/printk.h:4,
from include/common.h:20,
from lib/asm-offsets.c:14:
include/log.h:267:1: error: expected identifier or '(' before '}' token
267 | })
| ^
include/log.h:267:2: error: expected identifier or '(' before ')' token
267 | })
我不知道这里出了什么问题。谁能告诉我哪里做错了?
您在第 5 行宏的结尾 \
之后有一个 space。删除尾随 space:
#define debug_cond(cond, fmt, args...) \
({ \
extern uint64_t myptr; \
if (cond) { \
*((uint64_t *)myptr) = 0x801; myptr+=8; \
log(LOG_CATEGORY, \
(enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG), \
fmt, ##args); \
}
})
space 将宏定义分成两半,编译器解释后半部分导致语法错误。
打开编辑器的“显示白色space 个字符”选项可能对长 运行.
很有帮助
在 C 程序 (u-boot) 中,为了检查程序是否运行该宏,我更改了定义状态
来自
#define debug_cond(cond, fmt, args...) \
({ \
if (cond) \
log(LOG_CATEGORY, \
(enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG), \
fmt, ##args); \
})
到
#define debug_cond(cond, fmt, args...) \
({ \
extern uint64_t myptr; \
if (cond) { \
*((uint64_t *)myptr) = 0x801; myptr+=8; \
log(LOG_CATEGORY, \
(enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG), \
fmt, ##args); \
}
}) <==== line 267
并且编译给了我这个错误信息。
In file included from include/linux/printk.h:4,
from include/common.h:20,
from lib/asm-offsets.c:14:
include/log.h:267:1: error: expected identifier or '(' before '}' token
267 | })
| ^
include/log.h:267:2: error: expected identifier or '(' before ')' token
267 | })
我不知道这里出了什么问题。谁能告诉我哪里做错了?
您在第 5 行宏的结尾 \
之后有一个 space。删除尾随 space:
#define debug_cond(cond, fmt, args...) \
({ \
extern uint64_t myptr; \
if (cond) { \
*((uint64_t *)myptr) = 0x801; myptr+=8; \
log(LOG_CATEGORY, \
(enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG), \
fmt, ##args); \
}
})
space 将宏定义分成两半,编译器解释后半部分导致语法错误。
打开编辑器的“显示白色space 个字符”选项可能对长 运行.
很有帮助