C 将数据类型输入设置为MAX+;1价值观

C 将数据类型输入设置为MAX+;1价值观,c,unit-testing,C,Unit Testing,我正在用语言对代码进行单元测试,我在想,如果我不使用数据类型的MAX+1值测试输入,会有什么危害 通常,如果变量值超出其MAX容量,则将变量值包装为其最小值。例如:如果在255之后增加char(范围:0-255)将导致0 是否有任何示例表明,如果不进行测试,那么使用MAX+1会非常有害?如果值回滚到数据类型的最小值,则使用MAX+1进行测试是否有意义取决于您是否对所需的MAX+1函数的行为有期望如果将来发生某些潜在的变化,也应予以尊重。假设函数foo(uint8\u t u):通常应避免使用参数

我正在用语言对代码进行单元测试,我在想,如果我不使用数据类型的
MAX+1
值测试输入,会有什么危害

通常,如果变量值超出其
MAX
容量,则将变量值包装为其最小值。例如:如果在
255
之后增加
char
(范围:
0-255
)将导致
0


是否有任何示例表明,如果不进行测试,那么使用
MAX+1
会非常有害?如果值回滚到数据类型的最小值,则使用
MAX+1
进行测试是否有意义取决于您是否对所需的
MAX+1
函数的行为有期望如果将来发生某些潜在的变化,也应予以尊重。假设函数
foo(uint8\u t u)
:通常应避免使用参数
256
调用此类函数,并且可能会收到警告。尽管如此,它还是被允许的,这意味着
0
的值实际上被传递给函数

这里的情况是,类型不匹配由编译器以导致值更改的方式处理,即在
模256
操作的隐式计算中。如果您出于某种原因拥有依赖于此的代码,那么拥有相应的测试用例是有意义的。这将保护您免受参数类型从
utf8\u t
更改为(比如)utf16\u t的情况:此更改将意味着前一个隐式
模256
变为隐式
模65536


请注意,在我看来,对模运算使用类型转换无论如何都不是一个好的实践。也就是说,如果调用者想要一个
模256
操作,那么调用者应该在调用中解释它,比如
foo(x%256)

注意这里,有符号的
无符号的
过流/欠流的行为是不同的。更具体地说,有符号整数溢出是未定义的。还请记住,如果
char
是有符号或无符号类型,则它是特定于实现的。这是另一个方向的溢出,但这段代码如何<代码>大小到分配=14;to_alloc-=某个用户定义的值;Foo*bar=malloc(to_alloc)如果
某个用户定义的值
大于等于14会发生什么?您刚刚尝试分配
SIZE\u MAX
字节,这可能会失败,如果您正确检查返回值,会导致一个孤立的错误,或者如果您有内存,它会占用大量的内存。此外,还有一些确保这是一个好问题的提示:(1)从标题中删除标记。我们这里有标签。(2) 澄清“测试最大值+1”的含义。你是说“最多通过1英寸”吗?因为那样不行。如果你的意思是“精心安排事情,使溢出成为可能”,请说明。(3) 不要在语言中使用C标记。在谈论标签时使用标签;当你谈论语言时,请使用“C”这个词。(4) 不要对非代码的东西使用
code标记
。请记住,纯
char
的签名是特定于实现的。因此,更喜欢使用
无符号字符
。更妙的是(尽管可能有点偏执,除非您的代码可能被错误地编译在不寻常的平台上),如果您还想确定范围0-255,请使用
uint8\t