gpt4 book ai didi

c++ - 类型转换以减少代码

转载 作者:行者123 更新时间:2023-11-30 21:17:39 25 4
gpt4 key购买 nike

我正在尝试实现memset() 。我的代码可以正常工作,但我想知道我使用强制转换是好事还是坏事。

void* __memset(void *b, int c, size_t len){
while (len--)
*((unsigned char*)(b++)) = (unsigned char)c;
return (b);
}

我的代码更长,但我决定转换 void*使其更短。这样可以吗,还是代码会损坏。

最佳答案

警告(这实际上很有趣):

重新声明标准名称是一个坏主意,因为它会调用“未定义的行为”。这不仅仅是一些模糊的概念。这非常糟糕,因为编译器在做出决定时假设您不会调用未定义的行为。

考虑这个 c 文件:

#include <stdlib.h>

void* memset(void *b, int c, size_t len){
unsigned char* p = (unsigned char*)b;
while (len--) {
*p++ = c;
}
return b;
}

现在使用gcc5.3 -O3进行编译:

产生此汇编代码:

memset:
testq %rdx, %rdx
je .L6
subq $8, %rsp
movzbl %sil, %esi
call memset
addq $8, %rsp
ret
.L6:
movq %rdi, %rax
ret

结果:繁荣!

关于c++ - 类型转换以减少代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37134369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com