From C11 specs 6.4.4.4 Character constants
hexadecimal-escape-sequence:
\x
hexadecimal-digit
hexadecimal-escape-sequence
hexadecimal-digit
EXAMPLE 3 Even if eight bits are used for objects that have type char,
the construction '\x123' specifies an integer character constant
containing only one character, since a hexadecimal escape sequence is
terminated only by a non-hexadecimal character. To specify an integer
character constant containing the two characters whose values are
'\x12' and '3', the construction '\0223' may be used, since an octal
escape sequence is terminated after three octal digits. (The value of
this two-character integer character constant is
implementation-defined.)
So parser will try to parse as many characters of hexadecimal as available.
One workaround is to use string concatenation:
printf("10\xF8" "Celsius");
Live example
or
printf("10%cCelsius", '\xF8');
Or use equivalent octal escape sequence which is guaranteed to be not more than 3 characters long.
NOTE: Using '\xF8'
to print is not portable and may not work on many platforms. You can use unicode string literal for a portable code.