gpt4 book ai didi

在 c 中将 Const 转换为非 Const

转载 作者:太空狗 更新时间:2023-10-29 17:03:47 29 4
gpt4 key购买 nike

我正在做一个学校项目,我需要在其中重现许多 C 库函数。我只是在努力解决它的一个特定方面。

如果您查看 memchr 的手册页,您会发现它需要一个 const void * 作为输入并返回一个普通的 void *。我假设在函数中的某个地方,它们从 const 转换为非 const 以获取返回变量。

但是,当我这样做时 (clang -Weverything +Werror) 它不会编译。它可以在没有 -Weverything 标签的情况下工作,但如果可能的话我更愿意使用它。

有什么“正确”的方法可以做到这一点吗?

最佳答案

问题是由特定位置的 -Wcast-qual 选项触发的不需要的 GCC 样式(包括 Clang)诊断(-Weverything 包括 -Wcast -质量)。解决方案是在 just 那个地方禁用 just -Wcast-qual

#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-qual"
#endif
void* non_const_ptr = (void*)const_ptr;
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif

强制转换为非指针类型并返回指针类型会抑制所有类型的有用诊断,从而破坏-Weverything 的目的。

#ifdef __GNUC__ 包含在内以提高可移植性。众所周知,某些编译器会针对它们无法识别的编译指示发出警告,除非此类编译指示被 #ifdef 删除。

关于在 c 中将 Const 转换为非 Const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44356043/

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