我现在找不到链接,但是将 int
传递给需要 unsigned type
的函数应该没问题,只要 int
是积极吧? (并且落在无符号范围内);我收到警告,这就是我要问的原因
假设没有类型转换
假设 unsigned integers
值在 int
范围内,反之亦然?
最佳答案
将有符号整数传递给需要无符号整数的函数具有明确定义的行为。如果参数值在参数类型的范围内,则进行简单的转换;该值保持不变。如果参数值超出该范围,则会通过丢弃高位有效地进行转换。
当且仅当该行为与您的应用程序需要的行为方式一致时,这是可以的。
将无符号整数传递给需要有符号整数的函数具有明确定义的行为如果该值在参数类型的范围内。如果不是,那么隐式转换将产生一个实现定义的结果(或者,原则上,它可以引发一个实现定义的信号,但我不知道有任何实现可以做到这一点)。通常,结果等同于丢弃高位,或将无符号值解释为有符号值(将高位视为符号位),但语言不能保证这一点。对于无符号到有符号的转换,最好确保值在目标类型的范围内。
很多时候(但不总是)像这样的转换表明参数应该首先与参数具有相同的类型。
这一切都假设函数是用原型(prototype)正确声明的,因此编译器在看到调用时知道函数期望的类型。如果没有原型(prototype),或者函数是可变的(如 printf
),那么您需要更加小心。没有转换,但您可以相信 int
和 unsigned int
可以互换对于两者范围内的值。 (但依赖于此并不是一个好主意;最好确保您传递的参数是预期的类型。)
关于c - 什么时候可以将整数传递给需要无符号的函数,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899548/