%macro def 1.nolist %define %1 38 %endmacro %macro def2 1.nolist %define _%1 38 %endmacro def SMAC ; works as expected (unless SMAC already defined) def SMAC ; does not work, because the mmacro implicitly fully expands %1 def2 SMAC ; this is the workaround, which works (even multiple times) def2 SMAC ; but defines the smacro _SMAC, not SMAC