Because this came up numerous times during HH, I read the spec and want to share my findings. ;)

Arguments in C macros are always expanded before being inserted in the body of the macro, except when they refer to the macro itself, or when they get stringified or concatenated. In the latter two cases you'll have to create another macro to expand the argument and use this (expanded) macro with the # or ## operator.

There are a few exceptions, but taking this into account, you'll probably get by.