You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GLib测试框架中断言两个指针指向同一内存地址?

如何在GLib测试框架中断言两个指针指向同一内存地址?

嗨,这个场景GLib早就考虑到了,最优解是直接使用GLib专门提供的g_assert_ptr_equal()宏——这完全是为验证指针是否指向同一内存地址设计的,既简洁又安全,还能完美避开你遇到的类型转换错误。

你只需要把原来的代码替换成这样:

g_assert_ptr_equal(setting, setting_copied);

这个宏内部会安全处理指针类型的比较逻辑,不需要你手动做任何类型转换,跨平台的适配问题GLib也已经帮你搞定了,编译时不会再出现“指针转整数无强制转换”的警告或错误。

为什么你之前的写法会报错?

你之前尝试的g_assert_cmpuint()是用来比较无符号整数的宏,它会把传入的参数隐式转换成guint64类型。但直接把指针(比如你的MsTweaksSetting *)传进去时,相当于把指针直接赋值给整数变量,这违反了C语言的类型安全规则,所以编译器触发了-Wint-conversion的错误(你的编译环境把这个警告当成了错误来处理)。

退而求其次的整数比较方式(不推荐)

如果你因为某些特殊原因一定要通过整数比较来验证指针地址,那应该用C标准库提供的uintptr_t类型(需要包含<stdint.h>头文件)——这是专门为存储指针值设计的无符号整数类型,能保证在所有平台上都和指针大小匹配。代码示例如下:

#include <stdint.h>

// ...

g_assert_cmpuint((uintptr_t)setting, ==, (uintptr_t)setting_copied);

不过这种写法既繁琐又没必要,毕竟g_assert_ptr_equal()已经是最贴合需求的工具了。

总结一下,直接用g_assert_ptr_equal()就对了,这是GLib官方推荐的指针地址比较方式,能帮你省掉很多麻烦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 11:54:31