关于C编程,我在示例代码中看到了几种情况,其中指针赋值涉及右侧操作数的显式转换,即使它已经与左侧操作数的类型匹配。只举一个例子:
void memcpy(u8int *dest, const u8int *src, u32int len)
{
const u8int *sp = (const u8int *)src;
u8int *dp = (u8int *)dest;
for(; len != 0; len--) *dp++ = *sp++;
}
当然,该函数也在头文件中正确声明为:
void memcpy(u8int * dest, const u8int * src, u32int len);
该函数已经将变量“src”定义为类型“const u8int *”,那么为什么在分配给“sp”时也会给出一个显式的强制转换,它也是“const u8int *”类型的?将“dest”分配给“dp”也是如此。
答案 0 :(得分:4)
如果你正在寻找一个神奇的神秘理由,你会感到失望。这种类型的显式类型转换没有意义。
这是程序员的一种风格决定(和IMO一样糟糕)。类型转换具有潜在的危险(通过“屏蔽”重要警告)并使代码更复杂以便阅读......它应该保留用于需要它的情况。这不是其中之一。
答案 1 :(得分:1)
当它们属于同一类型时,不要使用它。这是一个不好的做法。
也许你读错了书。
答案 2 :(得分:1)
我的猜测是它只是查找/替换操作的遗留物,没有理由这样做。
答案 3 :(得分:0)
他可能只是因为他虔诚地编写代码而没有任何意义(习惯)。
只有编写此代码的程序员知道他在做什么(或者他没有)。此函数可能会覆盖memcpy()
中的string.h
,因为您不能拥有两个相同名称的函数。知道了,他正处于危险的水域。你也必须使用它。