C preprocessor macro specialisation
===

Is it possible to have one macro expanded differently for one specific argument value and differently for all other arguments?

Say I define a current user:

    #define CURRENT_USER john_smith
    
What I want to be able to do is to have a macro that will be *expanded* differently if user passed matches `CURRENT_USER`. Mind you that I don't know all possible user a priori. The most basic case:

    #define IS_CURRENT_USER(user)                   \
        /* this is not valid preprocessor macro */  \
        #if user == CURRENT_USER                    \
            1                                       \
        #else                                       \
            0                                       \
        #endif                                      

With macro like that every other macro relying on the username could be done following way:
        
    #define SOME_USER_SPECIFIC_MACRO(user) SOME_USER_SPECIFIC_MACRO_SWITCH_1(IS_CURRENT_USER(user))
    
    #define SOME_USER_SPECIFIC_MACRO_SWITCH_1(switch)   SOME_USER_SPECIFIC_MACRO_SWITCH_2(switch) // expand switch ...
    #define SOME_USER_SPECIFIC_MACRO_SWITCH_2(switch)   SOME_USER_SPECIFIC_MACRO_##switch         // ... and select specific case
        
    #define SOME_USER_SPECIFIC_MACRO_0  ... // not current user
    #define SOME_USER_SPECIFIC_MACRO_1  ... // current user
    
Is this possible?