【发布时间】:2018-07-17 12:19:24
【问题描述】:
我想在我的文件中使用以下宏
#define DO_WAKEUP_SYNCHRONISIEREN proc.id = process_WAKEUP;proc.priority.level = PRIO_AKTIV_1;proc.priority.param=0u;(void)prio_mapF_put_in_matrix(proc)
我知道这违反了 MISRA-C:2004 规则 19.4 - 但我需要使用它来解决违规问题。
有什么方法可以使用 MACRO 并解决 MISRA-C 违规问题?
MISRA-C:2004 规则 19.4 是
C 宏只能扩展为花括号初始化器、常量、 字符串文字、带括号的表达式、类型限定符、 存储类说明符,或 do-while-zero 构造。
【问题讨论】:
-
最好将宏代码包装在
do {} while(0)中,以便在条件下将其视为唯一的“指令”。 -
@Jean-FrançoisFabre 我收到以下消息“违反 MISRA 2004 所需规则 19.4,不允许定义宏 'DO_WAKEUP_SYNCHRONISIEREN'”