我用C语言写了如下宏:
#define STR(x) #x
我期望下面的调用会产生结果“11”:
STR(5+6)
但它实际产生的结果是“5+6”
如何编写宏来达到我想要的结果?可以用C或者C++语言实现吗?
谢谢大家!
宏是由 C 预处理器完成的文本替换;一个在编译器本身看到代码之前运行代码的工具,因此,在评估任何编译时常量表达式(例如 5+6)之前。
最重要的是,预处理器不知道您正在编写的语言。它不知道 C 或 C++ 的任何语法或语义。
这就是为什么在 C++ 世界中,宏通常被认为是“邪恶的”(阅读:除非绝对必要,否则应该避免)。 请注意,您想要的结果(将编译时求值的数字解析为编译时求值的字符串)即使在最新的 C++ 标准修订版中也通常无法实现。
constexpr
字符串确实存在,但它们不会长期存在:请参阅 Is it possible to use std::string in a Constant Expression?
底线:无法完成,必须在运行时完成。