我在讀書學習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