XMACRO. Как бы избавиться от макроопределения EN_PREFIX
#define PASTE(X, Y) X ## Y
#define X_MACRO_FOR_EXPAND_AS(X1, X2) PASTE(X1, X2)
#define EXPAND_INPUT_CASE( X1, X2, X3) \
settings.X_MACRO_FOR_EXPAND_AS(EN_PREFIX, .)X1 = \
(X2)GetValueUsingEnum(enInListPar_##X1, \
X_MACRO_FOR_EXPAND_AS(enInOutType, EN_PREFIX));
//#define COMMON_INPUT_CASE(X) _COMMON_INPUT_CASE(X)
#define _COMMON_INPUT_CASE(X) \
case enInOutType##X: \
COMMON_INPUT_##X( EXPAND_INPUT_CASE)\
break;
#define COMMON_INPUT_FireManual( INPUT_FIRE_MANUAL ) \
INPUT_FIRE_MANUAL( bArmDelay, uint8_t, 8) \
INPUT_FIRE_MANUAL( fAutoArmE, uint8_t, 1) \
INPUT_FIRE_MANUAL( fDisallowDisarm, uint8_t, 1) \
INPUT_FIRE_MANUAL( btfIndicationControlMode, uint8_t, 2) \
INPUT_FIRE_MANUAL( fReserveBatteryControlE, uint8_t, 1) \
INPUT_FIRE_MANUAL( Dummy3, uint8_t, 3) \
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#undef EN_PREFIX
#define EN_PREFIX FireManual
_COMMON_INPUT_CASE(FireManual)
это разворачивается в
case enInOutTypeFireManual:
settings.FireManual.bArmDelay = (uint8_t)GetValueUsingEnum(enInListPar_bArmDelay, enInOutTypeFireManual);
settings.FireManual.fAutoArmE = (uint8_t)GetValueUsingEnum(enInListPar_fAutoArmE, enInOutTypeFireManual);
settings.FireManual.fDisallowDisarm = (uint8_t)GetValueUsingEnum(enInListPar_fDisallowDisarm, enInOutTypeFireManual);
settings.FireManual.btfIndicationControlMode = (uint8_t)GetValueUsingEnum(enInListPar_btfIndicationControlMode, enInOutTypeFireManual);
settings.FireManual.fReserveBatteryControlE = (uint8_t)GetValueUsingEnum(enInListPar_fReserveBatteryControlE, enInOutTypeFireManual);
settings.FireManual.Dummy3 = (uint8_t)GetValueUsingEnum(enInListPar_Dummy3, enInOutTypeFireManual);
break;
Хотелось бы как то в EXPAND_INPUT_CASE передать не EN_PREFIX, а чтобы использовался параметр FireManual, который передаётся в макро _COMMON_INPUT_CASE