Я читаю книгу, чтобы узнать 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;
}
ли НКУ препроцессор не в состоянии сделать это правильно или это что-то не так с кодом, который нужно изменить?
Я думаю, что это printfs, которые возились. – Marvo
Нет, это строки #elif, которые имеют проблемы. Например, препроцессор расширяет первый #elif до '#elif" Я знаю язык C. \ N "== 'C'', а затем не получается. [ideone тоже терпит неудачу.] (http://ideone.com/TkzvEk) – cebarth
Любой из ответов, данных до сих пор, будет работать. Однако, я должен сказать, если это пример из книги, вы можете пересмотреть, какую книгу вы используете. – cebarth