宏定义格式错误的宏

时间:2013-01-15 10:48:08

标签: c macros

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

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

1 个答案:

答案 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;中缺少分号(;