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 に答える