使用#define和#进行字符串化以将另一个宏常量转换为字符串

问题描述 投票:2回答:1

关于这个问题Quote macro for defining string,我想打印一个宏常量的值,例如下面的代码:

#include<stdio.h>
#define X 4
#define Tostring(x) #x
main()
{
    printf(Tostring(X));
}

它是printng X而不是4,但是使用Quote macro for defining string我知道如何纠正它,但是有人可以解释这里的锣声是什么吗?

c c-preprocessor
1个回答
3
投票

要打印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中给出的示例之一。声明如果要对宏扩展的结果进行字符串化,则应使用两个级别的宏。扩展的结果如下:

Tostring(X)->托克斯(4)->力量(4)->“ 4”

在第二个示例中,您将Tostring宏的参数与#define X 4中的X相关联,因此可以将值打印为整数。

© www.soinside.com 2019 - 2024. All rights reserved.