-Wpedantic错误类型参数在转换后递增
我有一个代码
while (n--) { *((char*)dest++) = *((char*)src++); }
其中dest
和src
是void指针, n
是一个大小。 目标是重新实现memcpyfunction。 当用gcc编译这个代码时,一切都很好,但是当我添加-Wpedantic
标志时,我有四个警告“错误的类型参数来增加”。
Google告诉我,当尝试在void指针上使用算法时会发生这种情况,因为在这种情况下gcc将void类型视为1字节类型,但遗留编译器不应该这样做。 然后我必须将指针强制转换为char指针但是你可以看到我已经做到了!
任何的想法?
在使用它们之前将dest
(void) dest
和src
为unsigned char *
会得到最干净的代码(以堆栈上的两个指针变量为代价)。
unsigned char * dest_p = (unsigned char *)dest; unsigned char * src_p = (unsigned char *)src; while ( n-- ) { *dest_p++ = *source_p++; }
(为什么没有unsigned
?因为这是标准明确定义它的方式。;-))