gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:23:00 25 4
gpt4 key购买 nike

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

此代码未编译:

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com