I don't think you can do it with the Standard C preprocessor. It's time to
write a little utility to do the transformation.
Like
$ printf '%s\n' '75B22636-668E-11CF-A6D900AA0062CE6C' \
| sed 's/-//g;s/\(..\)/0x\1u, /g'
returns
0x75u, 0xB2u, 0x26u, 0x36u, 0x66u, 0x8Eu, 0x11u, 0xCFu, 0xA6u, 0xD9u,
0x00u, 0xAAu, 0x00u, 0x62u, 0xCEu, 0x6Cu,
(Line break added manually for readibility.) The input string must have
an even number of nibbles.
----v----
static const char unsigned uuid[] = { UUID_INITIALIZER_LIST };
----^----
$ gcc -c -D UUID_INITIALIZER_LIST="$(printf ... | sed ...)" source.c
With bash, one can use the <<< redirection operator ("here string")
instead of the printf command and the pipeline.
$ sed 's/-//g;s/\(..\)/0x\1u, /g' <<< '75B22636-668E-11CF-A6D900AA0062CE6C'
Note that C90 6.5.7 "Initialization" explicitly allows the trailing
comma (also shown in Example 5), and so does C99 6.7.8 "Initialization".
The C99 Rationale v5.10 says in 6.7.8 "Initialization", page 89, lines
5-9:
----v----
K&R allows a trailing comma in an initializer at the end of an
initializer-list. The Standard has retained this syntax, since it
provides flexibility in adding or deleting members from an initializer
list, and simplifies machine generation of such lists.
----^----
Cheers,
lacos