且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

类型转换void指针?

更新时间:2021-11-18 00:56:11

" hugo2" < OB **** @ yahoo.com>在消息中写道

news:11 ********************* @ z14g2000cwz.googlegro ups.com ...
"hugo2" <ob****@yahoo.com> wrote in message
news:11*********************@z14g2000cwz.googlegro ups.com...
Obrhy / hugo 2004年7月12日

看看这个memcpy()定义。
是否有一个很好的理由将void指针
args强制转换为字节将他们的
地址分配给字节指针?

/ *来自Steve Maguire'''Writing Soild Code''* /

void * memcpy(void * pvTo,void * pvFrom,size_t size)
{
byte * pbTo =(byte *)pvTo;
byte * pbFrom =(byte *)pvFrom;
while(size - > 0)
* pbTo ++ = * pbFrom ++;

返回(pvTo);
}

地址都是unsigned int。为什么不
简单的字节* pbTo = pvTo;初始化?
Obrhy/hugo July 12, 2004

Take a look at this memcpy() definition.
Is there a good reason the void pointer
args are cast to byte just to assign their
addresses to byte pointers?

/*from Steve Maguire''s ''Writing Soild Code''*/

void *memcpy(void *pvTo,void *pvFrom,size_t size)
{
byte *pbTo = (byte *)pvTo;
byte *pbFrom = (byte *)pvFrom;
while(size-- >0)
*pbTo++ = *pbFrom++;

return (pvTo);
}

The addresses are all unsigned int. Why not
simply byte *pbTo = pvTo; to initialize?




IMO没有必要,如果这些无效*。

除非有人的Clib实现打破了,size_t是一个非负的

类型,因此不需要放大小 - > 0,只需要大小就可以了。

我在某处看过ssize_t linux最近,甚至在单一的unix规范中。

愚蠢的东西IMO。它限制了有效范围,允许签名值询问

的问题...


Alex



IMO there''s no need in this if those are void*.
And unless someone''s Clib implementation is broken, size_t is a nonnegative
type, hence no need to put size-->0, simply size would do.
I''ve seen ssize_t somewhere in linux recently, even in the single unix spec.
Stupid thing IMO. It limits the valid range by allowing signed values asking
for problems...

Alex


hugo2写道:
Obrhy / hugo 2004年7月12日

看看这个memcpy()定义。
有没有一个很好的理由,无效指针
args被转换为byte只是为了将它们的
地址分配给字节指针?

/ *来自Steve Maguire'''Writing Soild Code''* /


您是否忘记了''e'或错误的''我'

和'l''的顺序? SCNR

void * memcpy(void * pvTo,void * pvFrom,size_t size)
{
byte * pbTo =(byte *)pvTo;
byte * pbFrom =(byte *)pvFrom;
while(size--> 0)
* pbTo ++ = * pbFrom ++;

返回(pvTo);
}

地址都是unsigned int。为什么不
简单的字节* pbTo = pvTo;初始化?
Obrhy/hugo July 12, 2004

Take a look at this memcpy() definition.
Is there a good reason the void pointer
args are cast to byte just to assign their
addresses to byte pointers?

/*from Steve Maguire''s ''Writing Soild Code''*/
Did you forget an ''e'' or get wrong the order of ''i''
and ''l''? SCNR
void *memcpy(void *pvTo,void *pvFrom,size_t size)
{
byte *pbTo = (byte *)pvTo;
byte *pbFrom = (byte *)pvFrom;
while(size-- >0)
*pbTo++ = *pbFrom++;

return (pvTo);
}

The addresses are all unsigned int. Why not
simply byte *pbTo = pvTo; to initialize?




在void *的情况下,强制转换是完全没必要的。

我不知道类型的定义;字节&QUOT;但是如果

它不是unsigned char的typedef,我会

建议您看看

clc而不是相信这本书:不必要的演员

是一件坏事。


干杯

迈克尔

-

电子邮件:我的是/ at / gmx / dot / de地址。



In the case of void*, the cast is completely unnecessary.
I do not know the definition of the type "byte" but if
it is anything other than a typedef for "unsigned char", I would
suggest that you have a look at the wisdom to be found in
c.l.c rather than believing this book: Unnecessary casts
are a Bad Thing.

Cheers
Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.


hugo2写道:
hugo2 wrote:
Obrhy / hugo 2004年7月12日

看一下这个memcpy()的定义。
这是否有充分理由指针
args被转换为字节只是为了将它们的地址分配给字节指针?

/ *来自Steve Maguire'''Writing Soild Code''* /

void * memcpy(void * pvTo,void * pvFrom,size_t size)
{
byte * pbTo =(byte *)pvTo;
byte * pbFrom =(byte *)pvFrom;
while(size--> 0)
* pbTo ++ = * pbFrom ++;

return(pvTo);
}
地址都是unsigned int。为什么不
简单的字节* pbTo = pvTo;初始化?
Obrhy/hugo July 12, 2004

Take a look at this memcpy() definition.
Is there a good reason the void pointer
args are cast to byte just to assign their
addresses to byte pointers?

/*from Steve Maguire''s ''Writing Soild Code''*/

void *memcpy(void *pvTo,void *pvFrom,size_t size)
{
byte *pbTo = (byte *)pvTo;
byte *pbFrom = (byte *)pvFrom;
while(size-- >0)
*pbTo++ = *pbFrom++;

return (pvTo);
}

The addresses are all unsigned int. Why not
simply byte *pbTo = pvTo; to initialize?



你是对的,C中不需要强制转换。这将是C ++,所以

可能是这种用法的原因。它类似于来自* alloc()系列的

返回的强制类型转换,不是必需的,但是很多代码

无论如何都要执行它。我对这本书一无所知

你提到的。



Brian


You are correct, the cast is not required in C. It would be in C++, so
that could be reason for that usage. It''s similar to the casts for the
returns from the *alloc() family, not necessary but a LOT of code
examples out there do it anyway. I don''t know anything about that book
you mention.


Brian