c++ - 无后缀的十六进制文字的“缩小转换”警告?
问题描述
static int var[2] __attribute__ ((aligned (8))) =
{
0x0255cfa8,
0xfdfcddfc
};
为什么我会收到警告:narrowing conversion of '4261207548u' from 'unsigned int' to 'int' inside { } is ill-formed in C++11 [-Wnarrowing]
?
即使数字没有u
或没有U
后缀,它们似乎也被视为无符号?
解决方案
如果int
在您的平台上是 32 位,0xfdfcddfc
则为unsigned
. 那是因为您使用了十六进制表示法。
您有用的编译器警告您该数字对于int
.
请注意,如果您编写了 denary 等效项,那么它将是一个signed
类型 ( long
or long long
),并且编译器会发出一个稍微不同的警告。
参考:https ://en.cppreference.com/w/cpp/language/integer_literal#The_type_of_the_literal
推荐阅读
- twig - 光滑的旋转木马保持垂直并且没有响应/点击?
- flutter - 容器内的墨水/图标按钮颜色
- python - Python asyncio 没有显示任何错误
- ruby-on-rails - 在rails中没有用'='设置值
- python - 为什么 jpg 文件的大小比预期的大?
- javascript - 读取 JSON 文件进行编辑
- ruby - 自从更新到 MACOS Catalina 后,Ruby 指南针问题失败
- dart - Dart 中什么时候最好使用 getter 而不是函数?
- python - 将数据框中的逗号分隔值替换为另一个数据框中的值
- r - Leaflet - 欧洲空间网络图和距离岛移除