c - int 指针类型为 int

标签 c visual-studio types casting warnings

我很难解决 VS2013 发出的一个警告。 我所拥有的是一段用于将文本传递给 int var 的代码:

#define WRITE(txt)  { foo->bar.func = func_xyz; foo->bar.xyz.var = (((uint64_t) (uintptr_t) (txt)) & 0xFFFFFFFFu); } //where var is uint32_t

导致编译器返回

warning C4244: '=' : conversion from 'uintptr_t' to 'uint32_t', possible loss of data.

不幸的是,现在我不可能将 var 类型更改为 uint32_t 以外的任何类型,不幸的是我成了预处理器指令的受害者

#ifdef  _WIN64
    typedef unsigned __int64    uintptr_t;

有什么办法可以绕过这个警告并以正确的方式去做吗?我 100% 确定这是完全有效的(仅仅是因为它是),但任何类型的警告都是 Not Acceptable 。

最佳答案

再投一个 Actor 就可以了:

#define WRITE(txt) {                                                             \
    foo->bar.func = func_xyz;                                                    \
    foo->bar.xyz.var = (uint32_t)(((uint64_t) (uintptr_t) (txt)) & 0xFFFFFFFFu); \
} //where var is uint32_t

关于c - int 指针类型为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337679/

相关文章:

python - Visual Studio 如何将 Python 模块添加到 Intellisense

haskell - 如何在 Haskell 中编写 Deque 数据类型

信号量可以多次初始化吗

c - 按名称处理函数

c - 如何修改特定包含的包含路径

c# - 我是否正确调用了这个 C++ DLL?

c# - 如何使用左侧带有 Type 的 IS 运算符?

c++ - MacOSx - 使用 make 命令编译 C 项目

C# 错误 : Unassigned local variable error when using "switch"?

c# - 对 IReadOnlyCollection 的隐式/显式转换混淆