我需要调用一个函数,该函数调用宏函数来在运行时更改宏值。
此代码未编译:
#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);
^
最佳答案
宏值在编译前被预处理器替换,并且在运行时不存在。
它不是一个变量,它只是使用文本表示值“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++ 中,您实际上并不需要宏。您可以使用模板和/或 constexpr 变量作为编译时值。在 C++17 中,您甚至可以使用 constexpr if
。
关于c++ - 在宏函数 C++ 中设置宏变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50696132/