c++ - #define abc (0-0) 是什么意思
问题描述
最近在写代码的时候遇到了一个问题。代码是这样的-
if ((var >= min) && (var <= max))
{
return true;
}
min 和 max 都是之前已经定义的宏,而 var 是无符号整数。我将 min 的值更改为 0,这会产生警告,unsigned integer >= 0 will always be true。首先我想直接删除第一个条件来处理警告,但我的前辈拒绝这样做,因为代码不仅用于我正在工作的项目,还用于其他项目,所以也许 min 的值可能是在其他项目中高于 0。他是这样建议我的——
#define min (0-0)
这解决了问题,没有产生警告。但我不明白为什么它会起作用?我请我的前辈解释,但他说我自己找出来。我在谷歌上搜索,但没有找到任何熟悉的东西。那么有人可以向我解释上面发生了什么吗?先感谢您。
解决方案
答:因为编译器似乎不检查表达式的结果。
只是要知道:这是一个问题。编译器是正确的 - unsigned int 不能小于 0。无论你传递给这个函数,这个比较总是正确的。因为你在工作,所以按照别人告诉你的去做,但请记住——你是对的,应该删除它,因为它在你当前的实现中没有意义。
var 必须更改为 long long ,然后一切都会好起来的!问题就在那里!这是一个时间问题,有人将负值传递给该函数并且会失败。它将对将有符号值传递给期望无符号的函数发出警告,并且该人将弃用它以使其没有警告...
推荐阅读
- unity3d - Unity 3D:如何冻结帧以探索`Debug.DrawRay`绘制的碰撞线?
- c# - 映射错误后返回内容(Automapper .NET Core)
- mysql - 为相关的MySql数据库表创建多选过滤系统
- javascript - 获取数据并将标题添加到 Json 对象
- javascript - Bundle.js 不在我的应用程序的任何文件夹中,尽管 devtool 说相反
- php - 使用 PHP imap_open、DomainFactory 邮件打开邮箱
- c# - C# - 在 Visual Studio 之外执行应用程序时出现问题
- java - 制作计算器,但收到编译错误
- rust - 如何接受`Box
` 在接受 `Box 的地方 `? - python - 多个条件下的数据框切片 Python