C中有char8_t吗?

Is there a char8_t in C?

我在很多网站上搜索过,但没有得到任何结果。我知道 char8_t 自 C++20 以来是 C++ 中的关键字。我试图在 C 中找出它们是否在 C23 中将 unsigned char 类型定义为 char8_t(随着 u8 character literals 的发布)。谁能给我解释一下。

没有这样的东西,但你可以用 typedef 得到它,因为 char8_t 等同于 unsigned char:

typedef unsigned char char8_t;

您现在有一个 char8_t

注意:我最初回答提供使用宏(定义),但对于数据类型,typedef 是方式

不,目前 C23 中没有 char8_t

char8_t 类型(或 typedef)的支持尚未添加到 C23。我在 2018 年提交 N2231 将其添加回来,但当时无法参加任何会议来支持它。

编辑:2021-06-06:分别为N2653 (char8_t: A type for UTF-8 characters and strings (Revision 1)) has been submitted for C2x. Implementations of that proposal are available for gcc here and for glibc here. Patches submitted to gcc and glibc can be found here and here

N2653 不只是提出 char8_t typedef。它还建议将 u8 字符串文字的类型更改为 char8_t/unsigned char 以匹配 u8 字符常量,即 mbrtoc8()c8rtomb() 添加了 C++20 中的函数,并添加了一些与原子相关的宏和类型。