使用#define 和# 进行字符串化以将另一个宏常量转换为字符串
using #define and # for stringizing to convert another macro constant to string
参考这个问题,思路是想打印一个宏常量的值,比如下面的代码:
#include<stdio.h>
#define X 4
#define Tostring(x) #x
main()
{
printf(Tostring(X));
}
它是 printng X
而不是 4,但是 我知道如何更正它,但是有人能解释一下这里的 gong 到底是什么吗?
要打印 4,您可以使用以下方法之一:
字符串化结果:
#include<stdio.h>
#define Tostring(x) str(x)
#define str(x) #x
#define X 4
int main()
{
printf(Tostring(X));
}
或使用类似宏的函数将 X 转换为 int:
#include<stdio.h>
#define X 4
#define Tostring(x)(X)
int main()
{
printf("%d\n", Tostring(X));
}
第一个示例是 documentation 中给出的示例之一。那里指出,如果要将宏扩展的结果字符串化,则应使用两级宏。扩容结果如下:
字符串 (X)
-> Tostring(4)
-> 海峡 (4)
-> "4"
在第二个示例中,您将 Tostring 宏的参数与 #define X 4
中的 X 相关联,因此您可以将值打印为 int。
参考这个问题
#include<stdio.h>
#define X 4
#define Tostring(x) #x
main()
{
printf(Tostring(X));
}
它是 printng X
而不是 4,但是
要打印 4,您可以使用以下方法之一:
字符串化结果:
#include<stdio.h>
#define Tostring(x) str(x)
#define str(x) #x
#define X 4
int main()
{
printf(Tostring(X));
}
或使用类似宏的函数将 X 转换为 int:
#include<stdio.h>
#define X 4
#define Tostring(x)(X)
int main()
{
printf("%d\n", Tostring(X));
}
第一个示例是 documentation 中给出的示例之一。那里指出,如果要将宏扩展的结果字符串化,则应使用两级宏。扩容结果如下:
字符串 (X) -> Tostring(4) -> 海峡 (4) -> "4"
在第二个示例中,您将 Tostring 宏的参数与 #define X 4
中的 X 相关联,因此您可以将值打印为 int。