c - 无法在 gcc 的算术表达式中将 size_t 类型转换为 unsigned Short

标签 c gcc compiler-warnings

我正在开展一个将代码从 32 位迁移到 64 位的项目,其中我遇到一个问题,其中表达式包含 unsigned Shortsize_t 变量的混合以及结果值为无符号短整型。 示例代码如下:

unsigned short foo = GETSOMEVALUE();
size_t bar = GETSOMEVALUE();
unsigned sort res  = foo + bar;

在 gcc 64 位中编译此代码时,我收到警告

conversion to short unsigned int from "size_t" may alter its value

我在表达式中添加了(无符号短)的类型转换并对其进行了编译,并再次收到了警告

conversion to "short unsigned int" from "int" may alter its value

如何删除上述警告并保持变量类型不变? 我的实际问题是 gcc 无法将 64 位类型转换为 16 位类型。这是一些编译器定义的问题,或者我做错了一些事情。

最佳答案

  1. [我不敢相信自己正在回答这个问题]
  2. [我不对任何后果负责]
  3. [使用此功能需要您自担风险]。

也许您想要的是带有 gcc-Wno-conversion 开关。

关于c - 无法在 gcc 的算术表达式中将 size_t 类型转换为 unsigned Short,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27059273/

相关文章:

c - 为什么链接的二进制文件包含使用过的目标文件的文件名,如何删除它们?

c - 如何通过提取前几个数组位置来创建整数变量

c - 'a ## b' 在 C 中是什么意思?

c++ - -fsanitize 在 GCC-6.1 中不使用黄金链接器

c - 条件表达式: different behavior between compilers中的指针类型不匹配

iphone - 应该得到 20 个错误...但是在没有声明实例变量的情况下编译时得到 0...

javascript - Eclipse Javascript 如何关闭缺少分号警告?

c - 构建静态库时是否解析了 .o 文件之间的引用?

c - 包含的文件,全部还是全部?

c++ - 将动态库链接到链接到其他静态库的静态库