这里有一个程序说明了我的问题:
#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"
。