2016-01-22 2 views

ответ

1

Bison макросы ($ и @) только расширение непосредственно в действиях - и это расширение происходит, как зубр генерирует код C. Макросы C расширяются позже, когда ваш компилятор C работает на выходе бизона. Так что если вы хотите использовать бизонов макросы в C макрос, вам необходимо убедиться, что они появляются непосредственно в действии, как правило, в качестве аргумента макроса:

#define SET_LOCATION(DEST, SRC) \ 
     { DEST = SRC; \ 
     .... } 

используется в качестве

SET_LOCATION(@$, @n) 
+0

@ Додд Хорошая мысль. – mljli

1

Я только что нашел ответ после проверки выхода Bison. Когда вы пишете @$ непосредственно в семантических действиях, он заменяется на (yyloc) Бизоном. Но это не заменено в случае использования макроса C. Bison не расширяет макросы C. Они впоследствии расширяются GCC, что, безусловно, приведет к необъявленной ошибке «$».