【发布时间】:2021-08-11 06:00:35
【问题描述】:
以下代码编译良好:
uint32_t myfunc32() {
uint32_t var = 'asdf';
return var;
}
以下代码给出警告,“字符常量对于它的类型来说太长了”:
uint64_t myfunc64() {
uint64_t var = 'asdfasdf';
return var;
}
确实,64 位字符文字被 GCC 截断为 32 位常量。 64 位字符文字不是 C 的特性吗?我找不到这方面的任何好信息。
编辑:我正在做更多的测试。事实证明,另一个编译器 MetroWerks CodeWarrior 可以按预期编译 64 位字符文字。如果这还不是 GCC 的一个特性,那么它确实应该是。
【问题讨论】:
-
鉴于字符文字是
int,并且大多数系统上的int直接映射到int32_t,我认为这是有道理的......或者至少与使用一样有意义任何多字符文字(几乎没有)。 -
这里只是推测,但可能会出现这种观察结果,因为 gcc 支持的最宽字符格式是 32 位
wchar_t(可以保存 UTF-32 字符)。 -
"如果这还不是 GCC 的一个特性,它确实应该是。"不...因为多字符转换的结果是实现定义的,所以无论如何都没有用。最好避开它们。
-
只是一些疯狂的猜测,但添加
ul后缀是否有效?