Macros are simply textual substitution, so in your example writing TIMER_100_MS
in a program is a fancy way of writing 32768 / 10
.
Therefore, the question is when the compiler would evaluate 32768 / 10
, which is a constant integral expression. I don’t think the standard requires any particular behavior here (since run-time and compile-time evaluation is indistinguishable in effect), but any halfway decent compiler will evaluate it at compile time.