主题中讨论的其他器件:C2000-CGT
工具/软件:
根据 C11 标准、以下初始化应有效:
#include
#include
const char16_t abc[]= u“这应该可以正常工作而不会发出警告。\n“;
但当我尝试编译它时、会收到以下警告:
$../c2000-cgt/bin/cl2000 --C11 -I./c2000-cgt/include test.c
“test.c",“,第、第 3 行:错误:类型为“unsigned short [54]“的值不能用于初始化类型为“const char16_t []“的实体
1 在编译“test.c"时“时检测到错误。
>>编译失败
根本原因是、如果我们按照 typedef 链通过 minest_uint16_t 返回_uint16_t、则我们发现对于 CLA、定义正确、为 unsigned short;但对于 C2000、定义错误为 unsinged int。 即使这些是相同的东西,编译器恨生命和放弃。
我可以通过按如下方式对代码进行修改来使此代码正常工作:
#include
#include
const char16_t * abc =(char16_t *) u“这应该可以正常工作而不会发出警告..\n“;
虽然这种编译没有错误、但我无法再使用 sizeof (abc)、因为它现在只是一个指针。 因此、似乎无法初始化 char16_t 数组。
如果我执行不可讲操作并将 minor_uint16_t 的定义强制为 unsigned short (include/machine__types.h)、而不是 unsigned int、则 lo 不详、原始示例的编译没有错误。 我不知道当我这样做时还有什么中断、但我只是想证明这是根本原因。
因此、编译器显然会将 u“这是 UTF-16 文本“解析为 unsigned short、但 char16_t 解析为 unsigned int。 具有讽刺意味的是、它们的大小相同、但其中一个有意为 16 位整数、另一个恰好为该大小;它们并不相同。
char16_t 类型唯一问题的时间是定义 UTF-16 字符串、因此我建议 u“asdf"解“解析为 unsigned int、或者 minster_uint16_t 应解析为 unsigned short。 为什么在地球上不会呢?
是否有其他语法可以用于定义 UTF-16 字符串? 一个神奇地使其工作的编译器选项? 在包含任何系统头文件和 typedef unsigned short char16_t 之前、是否安全?
请提供任何指导。
