如果这可行或不实际取决于编译器使用的C标准.
只能连接两个窄字符串或两个宽字符串字符串.(直到C99)
和
如果一个文字没有前缀,则生成的字符串文字具有由前缀文字指定的宽度/编码.如果两个字符串文字具有不同的编码前缀,则连接是实现定义的.(自C99起)
[强调我的]
因此,如果您使用的是旧编译器或不支持C99标准(或更高版本)的编译器,则无法实现.除了固定宽度整数类型在C99中被标准化,因此对于这样的旧编译器来说宏并不存在,这使问题没有实际意义.
对于支持C99及更高版本的更现代的编译器,这是一个非问题,因为字符串文字连接将起作用,编译器将把非前缀字符串转换为宽字符串,所以做例如
wprintf(L"Value = %" PRIu32 "\n", uint32_t_value);
Run Code Online (Sandbox Code Playgroud)
会很好的.
如果你有一个pre-C99编译器,但仍然有宏和固定宽度的整数类型,你可以使用类似函数的宏L来为字符串文字添加前缀.就像是
#define LL(s) L ## s
#define L(s) LL(s)
...
wprintf(L"Value = %" L(PRIu32) L"\n", uint32_t_value);
Run Code Online (Sandbox Code Playgroud)