Pal*_*uja 2 c c++ glibc
我正在阅读glibc的源代码,我发现它有两个具有相同名称的宏. 这一个在105行 #define L_(Str) L##Str ,这就在130行 #define L_(Str) Str
#define L_(Str) L##Str
#define L_(Str) Str
这些宏到底意味着什么?用法仅用于比较两个字符 .例如,在第494行,您可以看到它用于比较*f和'$'之间的字符值 if(*f == L_('$')).如果我们想比较两个字符,我们可以直接比较它们,而不是通过宏指导它们?另外,第105行宏的用例是什么?
if(*f == L_('$'))
rkr*_*ahl 8
它假设具有L前缀的宏参数(wchar_t literal - 它使用表示每个可能的字符代码点而不是char类型中的正常8位所需的大数据类型)如果您正在编译函数的wscanf版本(第105行).否则它只是按原样传递参数(第130行).
##是c预处理器中的字符串连接运算符,L ##'$'最终将扩展为L'$'.
总结一下:它用于编译vscanf函数的两个互斥版本 - 一个在wchar_t上运行,一个在char上运行.
看看这个答案:C++中的L前缀究竟是什么?
归档时间:
9 年 前
查看次数:
123 次
最近记录: