如何使用C将int分配给unsigned long?

时间:2016-10-27 21:25:59

标签: c type-conversion

我正在使用C语言。有一个名为“npu_session_total”的函数。 然后,我将使用此func的返回值并将其分配给unsigned long变量“accelerated_count”。

int npu_session_total(void)
{
    // this will return an int
    return atomic_read(&npu_session_count);
}
........
unsigned long accelerated_count = npu_session_total();

这会导致任何问题吗?我该如何进行演员表?

谢谢!

1 个答案:

答案 0 :(得分:2)

int分配给unsigned long可以像OP一样完成。它在C中定义良好。some_int_value >= 0它始终不变为unsigned long

INT_MAX <= UINT_MAX <= ULONG_MAX

不需要演员,掩饰,也不需要数学 - 就像OP一样。

unsigned long some_unsigned_long_object = some_int_value;

诀窍是some_int_value < 0。保存的值为some_int_value + ULONG_MAX + 1@AnT OP的代码现在可以吗?也许不是。

更安全的转换会首先测试否定性。

int session_total = npu_session_total();
if (session_total < 0) {
  Handle_Negative_Case(session_total);
}
else {
  unsigned long accelerated_count = npu_session_total();
  ...
}

@OP评论int应该永远不会消极。防御性编码仍会检测到负值并处理它。也许是一个简单的错误信息并退出。