C/C++中int的字符串化

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)

Jer*_*fin 6

字符串化运算符#是预处理器的一部分。它是在编译时评估的。它无法在执行时获取变量的值,然后以某种方式神奇地将其转换为它在编译时可能已知的值。

如果要在执行时将执行时变量转换为字符串,则需要使用类似 的函数std::to_string。


use*_*419 6

原因是预处理器对传递给它们的标记进行操作,而不是对与这些标记相关的值进行操作.

#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