在宏函数C ++中设置宏变量值

时间:2018-06-05 08:59:00

标签: c++ macros

我需要调用一个函数来调用宏函数来改变运行时的宏值。

此代码未编译:

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)

在函数SET_MY_MACRO_VAL

> error: lvalue required as left operand of assignment

    #define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)
                                          ^
    in expansion of macro 'SET_MY_MACRO_VAL'
         SET_MY_MACRO_VAL(True);
         ^

1 个答案:

答案 0 :(得分:2)

宏值在编译时由预处理器替换,并且在运行时不存在。

它不是一个变量,它只是一种使用文本作为值的方式" 32"。

如果你这样做:

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)

它将扩展到此

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(32=(IS_TRUE)?16:U32)

你可以做的是使用#define

#ifdef SET_MACRO_VAL_32
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif

如果您愿意,可以使用条件宏

#if (IS_TRUE>0)
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif

编辑: 在C ++中,你不应该真的需要宏。您可以将template和/或constexpr变量用于编译时值。在C ++ 17中,您甚至可以使用constexpr if