Sto discutendo con un collega sull'uso della macro come un sottile (estremamente) livello di astrazione rispetto all'utilizzo di un wrapper di funzioni. L'esempio che ho usato è
Modo macro.
#define StartOSTimer(period) (microTimerStart(period))
Metodo wrapper funzionale
void StartOSTimer(period)
{
microTimerStart(period);
}
Personalmente, mi è piaciuto il secondo metodo in quanto consente modifiche future, anche le dipendenze #include sono astratte.