Usually for those situations I just try to pick something that&#x27;s a little more unique (maybe __bar_args). For things that end up defining globals I&#x27;ve used this technique before:<p><pre><code>    #define CAT2(a,b) a##b
    #define CAT(a,b) CAT2(a,b)
    #define Unique(symbol) CAT(symbol, __LINE__)
</code></pre>
and then use<p><pre><code>    #define my_useless_macro(value) \
        static int Unique(__macro_var_name) = value
</code></pre>
…with the (large?) caveat that it won&#x27;t work if you put 2 on the same line:<p><pre><code>    my_useless_macro(0); &#x2F;&#x2F; works
    my_useless_macro(1); my_useless_macro(2); &#x2F;&#x2F; Fails
</code></pre>
If you expect to call my_usless_macro() multiple times on a line (hint, macro expansions are always on the same line), then you might put an extra optional parameter in there with __VA_ARGS__, like this:<p><pre><code>    #define my_useless_macro2(value,...) \
        static int Unique(CAT(__macro_var_name, __VA_ARGS__)) = value
</code></pre>
and then this will work:<p><pre><code>    my_useless_macro2(1,a); my_useless_macro2(2,b); &#x2F;&#x2F; works
    #define doubly_useless(a,b)    \
        my_useless_macro2(a, __1); \
        my_useless_macro2(b, __2)
    doubly_useless(3,4);
</code></pre>
The C preprocessor is a bit of big hacky mess, but you can do some fairly powerful (and often type safe) things with it.