C99 中的隐式整数转换与静态代码检查器
Implicit integer conversion in C99 vs static code checker
我在我的 C99 代码中使用了如下内容:
uint64_t x = 1000ULL * (5U * 1000U);
我假设 U
总是意味着 unsigned int
。
我的静态代码检查器现在在这里抱怨隐式类型转换,这是正确的。但是它不会抱怨 unsigned long long
vs unsigned int
。它抱怨 unsigned char
与 unsigned short
相反。
所以我的问题是:
上面的文字是否可以解释为不同于 C99 中的 unsigned long long
和 unsigned int
的其他内容(尤其是更小的内容)?
不,在 C99 或任何其他版本的带有 U
后缀的 C 标准常量中,它们始终是无符号的,L
的数字给你等级 int
, long
或 long long
.
我在我的 C99 代码中使用了如下内容:
uint64_t x = 1000ULL * (5U * 1000U);
我假设 U
总是意味着 unsigned int
。
我的静态代码检查器现在在这里抱怨隐式类型转换,这是正确的。但是它不会抱怨 unsigned long long
vs unsigned int
。它抱怨 unsigned char
与 unsigned short
相反。
所以我的问题是:
上面的文字是否可以解释为不同于 C99 中的 unsigned long long
和 unsigned int
的其他内容(尤其是更小的内容)?
不,在 C99 或任何其他版本的带有 U
后缀的 C 标准常量中,它们始终是无符号的,L
的数字给你等级 int
, long
或 long long
.