 <p>Bison macros (<code>$</code> and <code>@</code>) are only expanding <em>directly</em> in actions -- and this expansion happens as bison generates C code. C macros are expanded in later, when your C compiler runs on the output of bison. So if you want to use the bison macros in a C macro, you need to ensure that they appear directly in the action, generally as an argument to the macro:</p> <pre><code>#define SET_LOCATION(DEST, SRC) \ { DEST = SRC; \ .... } </code></pre> <p>used as</p> <pre><code>SET_LOCATION(@$, @n) </code></pre>