Especialización en macros de preprocesador C basada en un argumento

¿Es posible tener una macro expandida de manera diferente para un valor de argumento específico y de manera diferente para todos los demás argumentos?

Digamos que defino un usuario actual:

#define CURRENT_USER john_smith

Lo que quiero poder hacer es tener una macro que seráexpandido diferente si el usuario pasa coincidenciasCURRENT_USER. Tenga en cuenta que no conozco todos los posibles usuarios a priori. El caso más básico:

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

Con una macro como esa, cualquier otra macro que se base en el nombre de usuario podría hacerse de la siguiente manera:

#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

es posible?

EDIT: Déjame aclarar. Digamos que cada programador define diferenteCURRENT_USER en su encabezado de configuración. Quiero que las macros específicas del usuario se extiendan a algo significativo si y solo si suuser coincidencias de argumentosCURRENT_USER. Como me gustaría que contengan esas macros_pragmas no puede ser una verificación de tiempo de ejecución (como se propone en algunas de las siguientes respuestas).

EDIT: Una vez más, la aclaración. Digamos que hay una macro para deshabilitar la optimización de algunas secciones de código:

#define TURN_OPTIMISATION_OFF __pragma optimize("", off)

Algunos programadores desean desactivar la optimización para diferentes secciones de código, pero no todas al mismo tiempo. Lo que me gustaría es tener una macro:

#define TURN_OPTIMISATION_OFF(user) /* magic */

Que va a coincidiruser argumento en contraCURRENT_USER Macro, tomada del archivo de configuración por programador. Si el usuario coincide, la macro se expande en pragma. Si no, a la nada.

Respuestas a la pregunta(7)

Su respuesta a la pregunta