glibc源代码中的L_宏

Pal*_*uja 2 c c++ glibc

我正在阅读glibc的源代码,我发现它有两个具有相同名称的宏.
这一个在105行
#define L_(Str) L##Str
,这就在130行
#define L_(Str) Str

这些宏到底意味着什么?用法仅用于比较两个字符
.例如,在第494行,您可以看到它用于比较*f和'$'之间的字符值
if(*f == L_('$')).如果我们想比较两个字符,我们可以直接比较它们,而不是通过宏指导它们?另外,第105行宏的用例是什么?

rkr*_*ahl 8

它假设具有L前缀的宏参数(wchar_t literal - 它使用表示每个可能的字符代码点而不是char类型中的正常8位所需的大数据类型)如果您正在编译函数的wscanf版本(第105行).否则它只是按原样传递参数(第130行).

##是c预处理器中的字符串连接运算符,L ##'$'最终将扩展为L'$'.

总结一下:它用于编译vscanf函数的两个互斥版本 - 一个在wchar_t上运行,一个在char上运行.

看看这个答案:C++中的L前缀究竟是什么?