Вот некоторый код, который я скопировал из Microsoft Developer Network
http://msdn.microsoft.com/en-us/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, которые он никогда не будет использовать?
Не будет ли, по крайней мере, несколько более эффективным объявление ps и hdc после case WM_PAINT: как это?
case WM_PAINT:
{
**PAINTSTRUCT ps;
HDC hdc;**
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
EndPaint(hwnd, &ps);
}
return 0L;