在我之前给出的答案中,我回应了以下警告,原因是'\u0B95'
需要三个字节,多字符文字也是如此:
warning: multi-character character constant [-Wmultichar]
但实际上,我不认为我是对的,我也不认为 gcc 是。该标准规定:
包含多个c-char的普通字符文字是多字符文字。
c-char的一个产生规则是通用字符名称(即\uXXXX
或\UXXXXXXXX
)。由于\u0B95
是单个c-char,因此这不是多字符文字。但现在它变得一团糟。该标准还说:
包含单个c-char的普通字符文字具有 type ,其值等于执行字符集中c-char
char
编码的数值。
所以我char
的文字在执行字符集中具有字符的类型和值(或者如果它在该集中不存在,则为实现定义的值)。char
仅定义为足够大以存储基本字符集的任何成员(标准实际上并未定义,但我认为它表示基本执行字符集):
声明为字符 (char) 的对象应足够大以存储实现的基本字符集的任何成员。
因此,由于执行字符集是 achar
可以保存的所有值的超集,我的角色可能不适合char
.
那么my有什么价值呢?char
这似乎没有在任何地方定义。该标准确实说,对于char16_t
文字,如果值不可表示,则程序格式错误。但是,它没有说明普通文字。
发生什么了?这只是标准中的一团糟还是我错过了什么?