For C/C++, I think the Preprocessor does the Macro processing before compiler compiles the program and that's why Macro name has to be literal or absolute, no variable allowed to declared Macro name.
In case of PHP, we can declare like this: DEFINE($name, $value); Which means, interpreter first interprets the variable and then macro is defined, i.e. like runtime macro processing.
Which actually creates a doubt that, is that really macro processing ? If not then what's the purpose of introducing such keyword like 'define'; to have values which cannot be changed ?
Or if there's macro processing, then can anybody explain, how it could be working ?