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

我有一个代码

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

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

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

任何的想法?

使用它们之前dest (void) destsrcunsigned char *会得到最干净的代码(以堆栈上的两个指针变量为代价)。

 unsigned char * dest_p = (unsigned char *)dest; unsigned char * src_p = (unsigned char *)src; while ( n-- ) { *dest_p++ = *source_p++; } 

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