2

我有一个类似的代码

while (n--)
{
  *((char*)dest++) = *((char*)src++);
}

其中destsrc是空指针和n大小。目标是重新实现一个 memcpy 函数。使用 gcc 编译此代码时,一切正常,但是当我添加-Wpedantic标志时,我有四个警告“错误的类型参数要递增”。

Google 告诉我,在尝试对 void 指针使用算术时会发生这种情况,因为在这种情况下 gcc 将 void 类型视为 1 字节类型,但旧版编译器不应该这样做。然后我必须将指针转换为 char 指针,但如您所见,我已经做到了!

任何想法?

4

1 回答 1

4

在使用它们之前强制转换 (void)destsrcto可以提供最干净的代码(以堆栈上的两个指针变量为代价)。unsigned char *

unsigned char * dest_p = (unsigned char *)dest;
unsigned char * src_p  = (unsigned char *)src;

while ( n-- )
{
    *dest_p++ = *source_p++;
}

(为什么unsigned?因为这就是标准明确定义它的方式。;-))

于 2014-09-25T07:57:05.153 回答