Вот ваш код, видимый компилятором после выполнения подстановки:
#include <stdio.h>
void ol_parser_parse()
{
printf("hello world\n");
}
void main()
{
ol_parser_parse();
}
В этом нет ничего таинственного.Каждый экземпляр «yyparse» становится «ol_parser_parse» в каждой строке, следующей за #define
.
. В документации идентификатор означает заменяемую вещь и список замененных токенов это то, что вы заменяете.Вы также можете иметь параметры, такие как:
#define TIMES_TWO(n) ((n) * 2)
Где вы можете сделать:
int x = TIMES_TWO(3);
Где это эквивалентно:
int x = ((3) * 2);
Где дополнительные скобкитак что вы можете сделать это и не испортить порядок операций:
int x = TIMES_TWO(1 - 5);
Без скобок это будет выглядеть так:
int x = 1 - 5 * 2;
Что оценивается как 1 - 10
, чтоэто не то, что вам нужно.
Есть способ эффективно использовать #define
, чтобы скрыть иные уродливые детали реализации.Имя ol_parser_parse
не должно вызывать беспокойства, если вы можете использовать макрос yyparser
.Это дает разработчикам свободу переименовывать эту функцию и соответствующий макрос, не нарушая весь ваш код.