升级GCC从4到10编译Qt代码时遇nonnull-compare错误求助
GCC 10升级后
nonnull-compare错误的原因解析 核心原因:编译器检查规则的强化
GCC 4对代码的空值检查逻辑相对宽松,而GCC 10大幅强化了-Wnonnull-compare警告的检测能力——当它识别到不可能为空的指针和NULL做比较时,就会触发警告。如果你的编译选项开启了-Werror(警告转为错误),就会出现你遇到的这个报错。
代码层面的矛盾点
你写的Q_ASSERT(&context)存在逻辑上的冗余:
- 根据C++标准,引用必须绑定到有效的对象,绝对不能是NULL。因此
&context(取引用的地址)得到的指针永远不可能为空,这个断言从语法和标准语义上来说完全没有意义。 - GCC 10的编译器能够分析出这个无意义的空值比较,因此触发了
-Wnonnull-compare警告。
解决方式
直接删除Q_ASSERT(&context)即可,因为它不符合C++引用的核心语义,没有任何实际作用。
内容的提问来源于stack exchange,提问作者Ehsan Sharifi Esfahani
相关产品推荐
相关产品推荐

