gpt4 book ai didi

c++ - 在 Clang 中禁用 "cast from pointer to smaller type uint32_t"错误

转载 作者:可可西里 更新时间:2023-11-01 17:37:00 25 4
gpt4 key购买 nike

我正在从事一个学校项目,该项目涉及在实验硬件上移植一大段 C++ 代码。不幸的是,该硬件是 64 位的,并且代码包含许多指针算术实例,这些实例期望指针是 32 位的,即它通常是 reinterpret_cast<uint32_t>(ptr)。 .

一个一个地浏览它们会非常乏味,而且由于无论如何这是一个实验项目,我很乐意接受一个“hackish”的解决方法。因此,我修改了 malloc 的实现,以确保它永远不会分配超过 4GB 限制的内存。因此,从技术上讲,这些类型转换应该是有效的。

问题是,我该如何向 Clang 解释这一点?我得到的错误是:error: cast from pointer to smaller type 'uint32_t' (aka 'unsigned int') loses information .有没有办法禁用它?

谢谢,大卫

最佳答案

Cpplang Slack 上的某个人那里得到这个后,我能够用 -fms-extensions 禁用它:

Looking at "DiagnosticSemaKinds.td" it shows up as err_bad_reinterpret_cast_small_int, https://github.com/llvm-mirror/clang/blob/release_50/include/clang/Basic/DiagnosticSemaKinds.td#L6193 There are two occurences in "SemaCast.cpp" -- one of which suggests it's sensitive to MS extensions, https://github.com/llvm-mirror/clang/blob/release_50/lib/Sema/SemaCast.cpp#L2112 One could try -fms-extensions (hopefully not -fms-compatibility), but that would bring all the shebang with it.

关于c++ - 在 Clang 中禁用 "cast from pointer to smaller type uint32_t"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21232460/

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