3

关于 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 *”,那么为什么在分配给同样类型为“const u8int *”的“sp”时会给出显式转换?将“dest”分配给“dp”也是如此。

4

4 回答 4

5

如果你正在寻找一个神奇的神秘理由来做这件事,你会失望的。这种类型的显式类型转换没有意义。

这是程序员的风格决定(而 IMO 是一个糟糕的决定)。类型转换有潜在的危险(通过“屏蔽”重要的警告)并使代码更复杂的阅读......它应该保留在需要的情况下。这不是其中的一个。

于 2013-01-22T17:19:03.303 回答
1

当它们已经属于同一类型时,这样做没有用。当然,这是一种不好的做法。

也许你读错书了。

于 2013-01-22T17:20:14.127 回答
1

我的猜测是它只是查找/替换操作的剩余部分,没有理由这样做。

于 2013-01-22T18:14:36.703 回答
0

他可能只是在虔诚地编写代码,背后没有任何意义(一种习惯)。

好吧,只有编写此代码的程序员知道他在做什么(或者他不知道)。这个函数可能会覆盖memcpy()from,string.h因为你不能有两个同名的函数。知道了这一点,他进入了危险的水域。如果你必须使用这个,你也是。

于 2013-01-22T17:20:54.617 回答