【发布时间】:2013-12-30 03:41:11
【问题描述】:
首先,我指的是一个例子:
UINT f, i, s;
CONST UINT k[5] = { VK_LBUTTON, VK_RBUTTON, VK_MBUTTON, VK_XBUTTON1, VK_XBUTTON2 };
for (f = RI_MOUSE_LEFT_BUTTON_DOWN, i = 0, s = RI_KEY_MAKE; f != RI_MOUSE_WHEEL; f <<= 1, i += s, s = !s)
if ((pMouseData->usButtonFlags & f) == f)
SetVKeyState(k[i], s);
与此相比:
if (pMouseData->usButtonFlags & RI_MOUSE_LEFT_BUTTON_DOWN)
SetVKeyState(VK_LBUTTON, RI_KEY_MAKE);
if (pMouseData->usButtonFlags & RI_MOUSE_LEFT_BUTTON_UP)
SetVKeyState(VK_LBUTTON, RI_KEY_BREAK);
if (pMouseData->usButtonFlags & RI_MOUSE_RIGHT_BUTTON_DOWN)
SetVKeyState(VK_RBUTTON, RI_KEY_MAKE);
if (pMouseData->usButtonFlags & RI_MOUSE_RIGHT_BUTTON_UP)
SetVKeyState(VK_RBUTTON, RI_KEY_BREAK);
if (pMouseData->usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_DOWN)
SetVKeyState(VK_MBUTTON, RI_KEY_MAKE);
if (pMouseData->usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_UP)
SetVKeyState(VK_MBUTTON, RI_KEY_BREAK);
if (pMouseData->usButtonFlags & RI_MOUSE_X1_BUTTON_DOWN)
SetVKeyState(VK_XBUTTON1, RI_KEY_MAKE);
if (pMouseData->usButtonFlags & RI_MOUSE_X1_BUTTON_UP)
SetVKeyState(VK_XBUTTON1, RI_KEY_BREAK);
if (pMouseData->usButtonFlags & RI_MOUSE_X2_BUTTON_DOWN)
SetVKeyState(VK_XBUTTON2, RI_KEY_MAKE);
if (pMouseData->usButtonFlags & RI_MOUSE_X2_BUTTON_UP)
SetVKeyState(VK_XBUTTON2, RI_KEY_BREAK);
后面的代码显然是一个完全展开的循环。
从长远来看,这确实是一个可读性或减少冗余(如代码不同区域的重复语句)是否更好的问题。
我更关心稍后在大型代码库的上下文中访问它。当然减少要修改的区域数量是一件好事; for 循环的初始化和更新语句是否有点混乱?
有没有人遇到过这个问题,可能是微不足道的问题。
【问题讨论】:
-
这里的邮政编码。不要把我们送到别处。
-
如果你想要可读性,你可以从重命名变量开始
-
不,我的意思是可读性。展开的循环很容易阅读,因为它是显式的,并且不使用逗号技巧之类的东西来在小空间中使用多个语句,但是如果需要更改语句,则可能会出错,因为要更改的内容太多。我意识到我的名字并不惊人;他们不应该成为焦点。这是将多个变量推入循环以压缩展开版本的想法。
-
快速浏览 - 展开的逐行代码立即可以理解,易于修改和调试。这对我足够了。我做了很多维护/增强和“聪明”的代码,需要努力解开只是让我想扼杀编写它的白痴。
-
@MartinJames 抱歉,不能 +2
标签: c performance winapi readability maintainability