我在读书学习C。在这本书中,以下示例代码给出了gcc(Debian 4.7.2-4)4.7.2的预处理器错误。错误是:预处理器无效的预处理器令牌错误
file.c: In function ‘main’:
file.c:16:14: error: token ""I know the C language.\n"" is not valid in preprocessor expressions
file.c:20:14: error: token ""I know BASIC.\n"" is not valid in preprocessor expressions
的代码是:
#include <stdio.h>
#define C_LANG 'C'
#define B_LANG 'B'
#define NO_ERROR 0
int main(void)
{
#if C_LANG == 'C' && B_LANG == 'B'
#undef C_LANG
#define C_LANG "I know the C language.\n"
#undef B_LANG
#define B_LANG "I know BASIC.\n"
printf("%s%s", C_LANG, B_LANG);
#elif C_LANG == 'C'
#undef C_LANG
#define C_LANG "I only know C language.\n"
printf("%s", C_LANG);
#elif B_LANG == 'B'
#undef B_LANG
#define B_LANG "I only know BASIC.\n"
printf("%s", B_LANG);
#else
printf("I don't know C or BASIC.\n");
#endif
return NO_ERROR;
}
是gcc的预处理程序不能正确地做这个或者是蹊跷的是需要改变的代码?
我在想这是打乱了事情的printfs。 – Marvo
不,这是#elif行有问题。例如,预处理器正在将第一个#elif扩展为'#elif“我知道C语言。\ n”=='C''然后失败。 [ideone也不行。](http://ideone.com/TkzvEk) – cebarth
到目前为止给出的答案都可以使用。但是,我必须说,如果这是一本书的例子,那么您可能需要重新考虑您正在使用的书。 – cebarth