ami*_*n__ 2 c c++ macros stringify
下面的代码应输出100我的字符串化知识.vstr(s)应该扩展为100,然后str(s)得到100,它应该返回字符串"100".但是,它输出"a"代替.是什么原因?但是,如果我用宏定义的常量调用,foo那么它输出"100".为什么?
#include<stdio.h>
#define vstr(s) str(s)
#define str(s) #s
#define foo 100
int main()
{
int a = 100;
puts(vstr(a));
puts(vstr(foo));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
字符串化运算符#是预处理器的一部分。它是在编译时评估的。它无法在执行时获取变量的值,然后以某种方式神奇地将其转换为它在编译时可能已知的值。
如果要在执行时将执行时变量转换为字符串,则需要使用类似 的函数std::to_string。
原因是预处理器对传递给它们的标记进行操作,而不是对与这些标记相关的值进行操作.
#include <stdio.h>
#define vstr(s) str(s)
#define str(s) #s
int main()
{
puts(vstr(10+10));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产出:10 + 10