我有以下宏,它应该获取一个结构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;
Run Code Online (Sandbox Code Playgroud)
但macro definition malformed for macro出于某种原因我收到了警告.
我使用了没有括号的宏(CLEAR_ARG),并设置了结构
POLICY_ARG_SET((&clear_arg),...)
Run Code Online (Sandbox Code Playgroud)
但我不想总是担心括号.为什么我会收到此警告,如何解决?
你错了括号.在名称和参数中,您不能使用它们,您需要在定义中使用它们(扩展的部分).
将您的宏更改为此,它应该工作:
#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;
Run Code Online (Sandbox Code Playgroud)
注意,在您的示例中(CLEAR_ARG)->arg1 = ARG1;也缺少分号(;)