Die Ausgabe des Ergebnisses geht nicht. Der Schlüssel dazu ist die
Unterscheidung zwischen Präprozessor und Compiler.
Der Präprozessor ersetzt TIMER_CALC wortwörtlich durch das, was dahinter
steht, und rechnet nicht etwa das aus. Erst der Compiler analysiert
überhaupt erst den Ausdruck, und es steht ihm frei, schon bei der
Kompilierung des Ausdruck zu berechnen (sofern ...), oder aber ihn erst
zur Laufzeit ausrechnen zu lassen.
Wenn der Ausdruck in einem #if verwendet wird, kann zwar auch der
Präprozessor ihn auswerten, allerdings mit großen Einschränkungen. Aber
Ausgeben wie beim printf oder so sind nicht möglich. Dsgl. bei
static_assert.
PS Das #if TIMER_PRESCALER == 1 ... #endif geht kürzer mit:
#define _TIMER_PRESCALER_gc(pre) TC_CLKSEL_DIV ## pre ## _gc
#define TIMER_PRESCALER_gc(pre) _TIMER_PRESCALER_gc(pre)
und danach etwas wie
int val = TIMER_PRESCALER_gc(TIMER_PRESCALER);
Einfach mal den Präprozessor-Output ansehen (bei gcc mit '-E').