这里是我从微软开发者网络复制的一些代码
http://msdn.microsoft.com/zh-cn/library/dd162487(v=VS.85).aspx
LRESULT APIENTRY WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
**PAINTSTRUCT ps;
HDC hdc;**
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
EndPaint(hwnd, &ps);
return 0L;
// Process other messages.
}
}
我可能错了,但我认为每当编译器执行像这样的语句之一时:
int var1
double var2
char var3[]
PAINTSTRUCT ps
HDC hdc
计算机会创建一个新变量。至少这是逻辑上的想法,因为当你想要创建一个新变量时,这就是你写的内容,对吗?
我还一直认为,如果你有像这样的代码块:
for(int i = 0; i < 100; i++)
int sum = i;
计算机将创建100个不同的变量,它们都具有相同的名称“sum”,并且包含在“i”中的某些值。
在上面的示例代码中,函数WndProc将在程序运行期间被调用多次,然而函数创建的两个变量“ps”和“hdc”只会在函数执行的一部分时间内使用。
那么计算机是否会创建许多单独的、多余的PAINTSTRUCT和HDC变量,而它永远不会使用它们呢? 在case WM_PAINT之后声明“ps”和“hdc”是否会更加高效?
case WM_PAINT:
{
**PAINTSTRUCT ps;
HDC hdc;**
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
EndPaint(hwnd, &ps);
}
return 0L;