【发布时间】:2011-04-14 16:29:33
【问题描述】:
当我实际上没有东西可以移动/复制时,我是否需要处理将memmove()/memcpy() 作为边缘情况的情况
int numberOfBytes = ...
if( numberOfBytes != 0 ) {
memmove( dest, source, numberOfBytes );
}
或者我应该直接调用函数而不检查
int numberOfBytes = ...
memmove( dest, source, numberOfBytes );
前sn-p中的check有必要吗?
【问题讨论】:
-
这个问题让我想起了一些检查诸如 free 之类的函数的空指针。没有必要,但我会在此处发表评论以表明您对此的想法。
-
@Toad:除了弄乱代码之外,还有什么目的?在阅读某人的代码时,我不需要知道原来的程序员“想过做这个实际上没有必要的操作,但因为它没有必要,所以我没有做”。如果我看到一个指针被释放,我知道它允许为空,所以我不需要知道原始程序员关于“我应该检查是否为空”的想法。使用
memcpy复制 0 个字节也是如此 -
@jalf:这是一个关于 stackoverflow 的问题,这让人怀疑。因此,添加评论可能对您没有帮助,但可能会对知识较少的人有所帮助
-
@Toad 是的,cmets 明确指出为什么看起来必要的检查实际上没有原则上是有价值的。硬币的另一面是这个特殊的例子是一个常见的案例,涉及一个标准库函数,每个程序员只需要学习一次答案;然后他们可以在他们阅读的任何程序中识别出不需要这些检查。出于那个的原因,我会省略 cmets。像这样具有多个调用的代码库要么需要将 cmets 复制并粘贴到每个调用中,要么仅在某些调用中任意使用它们,这两者都很丑。
标签: c++ c pointers memcpy memmove