wie man dem Ergebniss einer Präprozessorberechnung einen Variablentyp aufzwingen kann.
So was gibt es nicht.
Der Präprozessor rechnet in seinem eigenen Bereich (#if-Zeilen) nach seinen eigenen Regeln. Mit denen bin ich nicht vollständig vertraut, aber ich bin mir ziemlich sicher, dass er nicht mit unterschiedlichen Typen arbeitet.

Bei dem ganzen "Typen-Zeug" geht es um C-Berechnungen im Allgemeinen. Dabei spielt es überhaupt keine Rolle, ob ein Teil der Berechnung per Präprozessor-Textersetzung eingebracht wurde, oder nicht. Der Begriff "Präprozessorberechnung" ist hier daher völlig unangebracht und missverständlich.

Code:
#define F_CPU              1475600    // im makefile definiert
#define Systemtakt            50
#define VorteilerTimer0        1024
...
TCNT0 = (256-((F_CPU/VorteilerTimer0)/(Systemtakt*2)));
F_CPU ist vom Typ int32_t
Ja.

VorteilerTimer0 ist vom Typ int16_t,
Ja.

das Divisionsergebniss ist ebenfalls vom Typ int16_t
Nein, int32_t.

Systemtakt ist vom Typ int8_t
Nein, int16_t.

das dann folgende Divisonsergebnis ebenfalls int8_t
Nein, int32_t.

Und die Differenz dann auch int8_t
Nein, int32_t.

damit passend für das Register TCNT0
Bei der Zuweisung wird dann das int32_t Ergebnis auf uint8_t zurechtgestutzt.

Bei Berechnungen werden die Typen der beiden Operanden aneinander angepasst, wobei der größere Typ den Takt vorgibt (mindestens int), und das (Zwischen-)Ergebnis hat den gleichen Typ.

Welches "Symbol" wird verwendet um eine int16_t bzw. eine unit16_t zu erzwingen?
int16_t ist es bereits per Default. "50" ist ein int (äquivalent zu int16_t bei AVR). Ein unsigned macht man daraus mit U. "50U" ist ein unsigned int (äquivalent zu uint16_t bei AVR).