【发布时间】:2011-10-30 21:04:46
【问题描述】:
这是一个说明我的问题的程序:
#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相关,但增加了一个级别。
【问题讨论】:
-
我不认为你可以这样做......
#运算符适用于预处理器令牌而不是表达式,所以如果没有办法做到这一点,我一点也不感到惊讶无论如何。 -
@Spudd86:是的,我只是希望有一种方法可以在预处理器中进行数学运算,并且这里有人会知道。
-
你可以在预处理器中做数学运算,你只是不能将结果字符串化
#if 0 == 1 - 1将导致 true -
@Spudd86:好的,所以我希望有一种方法可以让我使用预处理器中的数学计算结果。也许我应该
#if QUOTIENT != 4 #error。
标签: c string macros c-preprocessor