我有以下宏,它应该得到一个结构CLEAR_ARG
并为它设置一些值:
#define POLICY_ARG_SET((CLEAR_ARG), ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ARG8) \
CLEAR_ARG->arg1= ARG1 \
CLEAR_ARG->arg2 = ARG2; \
CLEAR_ARG->arg3 = ARG3; \
CLEAR_ARG->arg4 = ARG4; \
CLEAR_ARG->arg5 = ARG5; \
CLEAR_ARG->arg6 = ARG6; \
CLEAR_ARG->arg7 = ARG7; \
CLEAR_ARG->arg8 = ARG8;
但出于某种原因我收到macro definition malformed for macro
警告。
我在(CLEAR_ARG)
上使用了没有括号的宏,并使用
POLICY_ARG_SET((&clear_arg),...)
但我不想总是担心括号。为什么我会收到此警告,如何解决?
答案 0 :(得分:7)
你错了括号。在名称和参数中,您不能使用它们,您需要在定义中使用它们(扩展的部分)。
将您的宏更改为此,它应该有效:
#define POLICY_ARG_SET(CLEAR_ARG, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ARG8) \
(CLEAR_ARG)->arg1 = ARG1; \
(CLEAR_ARG)->arg2 = ARG2; \
(CLEAR_ARG)->arg3 = ARG3; \
(CLEAR_ARG)->arg4 = ARG4; \
(CLEAR_ARG)->arg5 = ARG5; \
(CLEAR_ARG)->arg6 = ARG6; \
(CLEAR_ARG)->arg7 = ARG7; \
(CLEAR_ARG)->arg8 = ARG8;
注意,在您的示例(CLEAR_ARG)->arg1 = ARG1;
中缺少分号(;
)