gpt4 book ai didi

c - 如何将作为宏操作结果的宏字符串化?

转载 作者:太空狗 更新时间:2023-10-29 17:08:28 24 4
gpt4 key购买 nike

这是一个说明我的问题的程序:

#include <stdio.h>

#define NUMERATOR 8
#define DENOMINATOR 2
#define QUOTIENT (NUMERATOR / DENOMINATOR)

#define ZSTR(x) XSTR(#x)
#define YSTR(x) XSTR(x)
#define XSTR(x) STR(x)
#define STR(x) #x

int main()
{
printf("QUOTIENT: %d\n", QUOTIENT);
printf("STR(QUOTIENT): %s\n", STR(QUOTIENT));
printf("XSTR(QUOTIENT): %s\n", XSTR(QUOTIENT));
printf("YSTR(QUOTIENT): %s\n", YSTR(QUOTIENT));
printf("ZSTR(QUOTIENT): %s\n", ZSTR(QUOTIENT));
return 0;
}

这是它的输出:

$ gcc -g -Wall -o stringify stringify.c && ./stringify 
QUOTIENT: 4
STR(QUOTIENT): QUOTIENT
XSTR(QUOTIENT): (8 / 2)
YSTR(QUOTIENT): (8 / 2)
ZSTR(QUOTIENT): "QUOTIENT"

我想将字符串文字 "4" 传递给编译器,但我正在失去希望。这与 this question 有关, 但增加了一个级别。

最佳答案

您可以定义将它们的参数粘贴在一起的宏,然后定义(大量)其他宏来执行类似于表查找的求值:

#define DIV(X, Y)  DIV_(X, Y)
#define DIV_(X, Y) DIV_##X##_##Y
#define DIV_0_1 0
#define DIV_1_1 1
#define DIV_2_1 2
:
#define DIV_8_2 4
:

这有点乏味,但您可以轻松编写一个小程序来生成包含上述内容的头文件,并将其作为构建过程的一部分运行。那么你只需要

#define QUOTIENT  DIV(NUMERATOR, DENOMINATOR)

请注意,他的那种东西只适用于无符号整数——如果你需要负数或 float ,它就不起作用

关于c - 如何将作为宏操作结果的宏字符串化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7126329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com