Die Frage ist, *was* du optimieren willst: Laufzeit? Speicherverbrauch? Fehlererkennungsrate? Verständlichkeit? Portierbarkeit? ...

Abhängig davon, und abhängig vom verwendeten Compiler und dessen Beschalterung, der verwendeten Hardware, der Definition von uartbuffer[] und dem konkreten Kontext, in den das Codestück schliesslich geinlinet wird, wird die Antwort anders ausfallen.