我搜索了很多网站,但一无所获。我知道char8_t是C++中的一个关键字,从C++20开始。我试图在C中找出,他们是否在C23中对unsigned char
到char8_t
进行了类型定义(随着u8字符文字的发布(。有人能澄清我吗?
对char8_t
类型(或typedef(的支持尚未添加到C23中。我在2018年提交了N2231来添加它,但当时没能参加任何会议来为它辩护。
编辑:2021-06-06:N2653(char8_t:UTF-8字符和字符串的类型(修订版1((已提交C2x。这里的gcc和这里的glibc都可以实现该建议。提交给gcc和glibc的补丁可以分别在这里和这里找到。
编辑:2022-07-06:N2653库部分的实现终于在glibc中实现,预计将于8月发布2.36版本。
编辑:2022-12-30:N2653(char8_t:UTF-8字符和字符串的一种类型(修订版1((在2022年1月/2月的WG14虚拟会议上被C23接受,措辞如N3054 C工作草案所示。编译器支持存在于gcc的开发中分支中,该分支将于4月或5月以gcc13的形式发布。编译器支持也存在于Clang的开发中分枝中,该分枝将于3月或4月以Clang 16的形式发布。
N2653不仅仅提出了char8_t
typedef。还建议将u8
字符串文字的类型更改为char8_t
/unsigned char
以匹配u8
字符常量,添加C++20中的mbrtoc8()
和c8rtomb()
函数,并添加一些与原子相关的宏和类型。
没有这样的东西,但你可以用typedef来拥有它,因为char8_t
相当于unsigned char
:
typedef unsigned char char8_t;
您现在有一个char8_t
。
NB:我最初回答了使用宏(定义(的提议,但对于数据类型,typedef是的方式