Я хочу манипулировать выходом lex. В макросе ECHO есть только одна запись в yyout. Макрос окружен «#ifndef ECHO», поэтому я заменяю его желаемым действием. Однако я хочу быть уверенным, чтобы правильно воспроизвести исходное поведение lex. Lex определяет ECHO для этого фрагмента кода:Может ли кто-нибудь объяснить этот выход препроцессора lex?
do {
if (fwrite(yytext, yyleng, 1, yyout)) {
}
} while (0)
Может кто-нибудь угадать, почему выход не просто "FWRITE (...)"?
См. [Этот вопрос] (http://stackoverflow.com/questions/257418/do-while-0-what-is-it-good-for) – sjsam