2

我有以下宏,它应该获取一个结构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),...)

但我不想总是担心括号。为什么我会收到此警告,如何解决?

4

1 回答 1

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;中也缺少分号 ( ;)

于 2013-01-15T10:49:45.610 回答