-Wpedantic错误类型参数在转换后增加

时间:2014-09-25 07:53:32

标签: c gcc pointer-arithmetic gcc-pedantic

我有像

这样的代码
while (n--)
{
  *((char*)dest++) = *((char*)src++);
}

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

谷歌告诉我,当尝试在void指针上使用算术时会发生这种情况,因为在这种情况下gcc将void类型视为1字节类型,但遗留编译器不应该。然后我必须将指针强制转换为char指针,但正如你所看到的,我已经做到了!

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

在使用它们之前将destsrc投射到unsigned char * 会提供最干净的代码(代价是堆栈上的两个指针变量) )。

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

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

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