Ubuntu18+Boost0.17.4编译时bool比较警告的修正方案求助
解决布尔值与0比较的编译警告问题
警告原因
GetBoolArg()函数返回的是布尔类型,在C++中布尔值只有true(等价于1)和false(等价于0)两种状态,所以bool < 0的比较结果永远是false,编译器会触发-Wbool-compare警告。
问题根源
你需要检查的是数值型参数-rpcserialversion的取值(包括默认值DEFAULT_RPC_SERIALIZE_VERSION是否为负数),但错误使用了专门获取布尔型参数的GetBoolArg()函数——负数作为默认值传入后会被强制转换为true,完全无法实现你判断数值正负的需求。
修复代码
将GetBoolArg替换为获取数值型参数的GetArg函数,修改后的代码如下:
if (GetArg("-rpcserialversion", DEFAULT_RPC_SERIALIZE_VERSION) < 0)
这样既消除了布尔值与0比较的警告,又能正确判断参数(或默认值)是否为负数,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者MicroGuy
相关产品推荐
相关产品推荐

