本文介绍了警告C26454:算术溢出:“-"运算在编译时产生负无符号结果(io.5)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
代码分析:
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_HISTORY_TYPE,
&CAssignHistoryDlg::OnTcnSelchangeTabHistoryType)
警告C26454:
TCN_SELCHANGE
的定义是:
#define TCN_FIRST (0U-550U)
#define TCN_SELCHANGE (TCN_FIRST - 1)
我看不到我还能做些什么!
I can't see what else I can do!
推荐答案
您正在尝试从较小的无符号值中减去较大的无符号值,这会导致结果换行为零.在您的情况下,我假设将TCN_FIRST定义为0,因此将TCN_SELCHANGE设置为1将解决此问题.
You are trying to subtract a larger unsigned value from a smaller unsigned value and it's causing the result to wrap past zero. In your case, I assume TCN_FIRST is defined as 0 so setting TCN_SELCHANGE to one will fix the problem.
您还应该使用constexpr
或const
而不是定义.
You should also be using constexpr
or const
instead of defines anyway.
根据MSDN:
1 // Example source:
2 unsigned int negativeunsigned() {
3 const unsigned int x = 1u - 2u; // C26454 reported here
4 return x;
5 }
1 // Corrected source:
2 unsigned int negativeunsigned() {
3 const unsigned int x = 4294967295; // OK
4 return x;
5 }
这篇关于警告C26454:算术溢出:“-"运算在编译时产生负无符号结果(io.5)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!