gpt4 book ai didi

c - 为什么 libxml2 在 C/C++ 代码中到处都使用 "BAD_CAST"?

转载 作者:太空狗 更新时间:2023-10-29 11:41:31 25 4
gpt4 key购买 nike

据说是因为libxml2使用了unsigned char作为存储方便char set之间的编码/解码----强制用户在代码中到处写“BAD_CAST”是不是很难看, 在读取/创建 xml 节点名称、内容、文本节点等时

有没有办法避免到处写这样的“BAD_CAST”?设计真的太糟糕了。

最佳答案

这个设计决定是不幸的,但根源于 40 年前做出的另一个不幸的选择:默认情况下允许 char 可能被签名,这与 getchar()< 的行为不一致, strcmp()...

您可以使用内联函数将 char * 转换为 unsigned char *,反之亦然,并在传递参数时使用它们:

static inline unsigned char *c2uc(char *s) { return (unsigned char*)s; }
static inline char *uc2c(unsigned char *s) { return (char*)s; }

这些包装器比基本转换使用起来更安全,因为它们只能应用于一种类型并转换为它的 unsigned 对应物。常规转换是有问题的,因为它们可以应用于任何类型并隐藏类型转换错误。 static inline 函数由编译器扩展,没有运行时成本。

关于c - 为什么 libxml2 在 C/C++ 代码中到处都使用 "BAD_CAST"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45058878/

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