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

C++ 在宏函数C+中设置宏变量值+;,c++,macros,C++,Macros,我需要调用一个函数,该函数调用宏函数来在运行时更改宏值 未编译此代码: #define MY_MACRO 32 #define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32) 在函数SET\u MY\u MACRO\u VAL中 >错误:赋值的左操作数需要左值 #定义集合“我的宏”值(是真的)(我的宏=(是真的)?16:U32 ^ 在宏“SET\u MY\u macro\u VAL”的展开中 设置我的宏值(真); ^ 宏值在编译前由预处

我需要调用一个函数,该函数调用宏函数来在运行时更改宏值

未编译此代码:

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)
在函数
SET\u MY\u MACRO\u VAL中

>错误:赋值的左操作数需要左值
#定义集合“我的宏”值(是真的)(我的宏=(是真的)?16:U32
^
在宏“SET\u MY\u macro\u VAL”的展开中
设置我的宏值(真);
^

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

它不是一个变量,只是一种将文本用于值“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

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

#if (IS_TRUE>0)
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif
编辑:
在C++中,你不应该真的需要宏。可以使用模板和/或constexpr变量作为编译时值。在C++17中,如果运行时没有宏,甚至可以使用
constexpr。宏甚至在编译时已知的compliationis
是否为TRUE
之前就已展开?如果没有,恐怕使用预处理器是不可能的。没有宏函数或宏变量……或者根本不使用宏。是的,但问题是关于宏:)。C++模板和/或CONTXEPR是更好的,更干净的,你也可以把这个问题读成“如何调用函数来改变运行时的值”;别担心,我已经投了你一票了
#if (IS_TRUE>0)
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif