调试小技巧:利用volatile关键字选择合适的常数
不知道大家有没有遇到这样的情况,有时候我们需要在代码中使用一个常数,比如-标签的颜色。但关于这个常数取什么值,我们却想逐个看看,比如:
1: const COLORREF color2=RGB(75,150,25); // what color do I like?
2: CBrush brush2(color2);
3: dc.SelectObject(&brush2);
4: dc.Chord(pt.x-r, pt.y-r, pt.x+r, pt.y+r,0,0,0,0);
在这段代码中,如果每次在想要尝试其他颜色时,我们都重新编译构建项目,将会是非常繁琐的。因此,我的做法是:
1: static COLORREF color2=RGB(75,150,25); // what color do I like?
2: CBrush brush2(color2);
3: dc.SelectObject(&brush2);
4: dc.Chord(pt.x-r, pt.y-r, pt.x+r, pt.y+r,0,0,0,0);
接下来在每次想要尝试其他颜色时,都在Debugger中直接修改为其他颜色值。但在接下来的:
2: CBrush brush2(color2);
这句中,却发现传进去的参数依然是编译时的值,我的修改没起作用。显然,是C++编译器将color2这个常数直接优化掉了。不过没关系,我们可以用 volatile:
1: static volatile COLORREF color2=RGB(75,150,25); // what color do I like?