这里有一个程序说明了我的问题:

#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有关,但增加了一个级别。

最佳答案

通过一些技巧,您可以在符合C99的预处理器中实现基本算法。P99实现小十进制数的算术和逻辑。例如

P99_IF_GT(1,0)(true)(false)
P99_ADD(3, 7)
P99_MUL(7, 2)
P99_DIV(7, 2)

会被预处理成
1
10
14
3

可以进一步处理这些宏,并对其进行字符串化处理。
P99_STRINGIFY(P99_PASTE2(XXX_, P99_ADD(3, 7)))

导致预处理结果"XXX_10"

09-05 15:23