Почему char [] как статический - PullRequest
0 голосов
/ 29 декабря 2018

Скажите, пожалуйста: почему char [] как статическое в приведенном ниже коде (весь код по этой ссылке: cpp.sh/7krd3)?Я не могу понять причину.

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
     {
     static char szAppName[] = "HelloWin" ;
     HWND        hwnd ;
     MSG         msg ;
     WNDCLASSEX  wndclass ;

     //...

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Нет причин делать это статической (глобальной) переменной.Windows API нигде не определяет это требование.Windows API, кажется, просто копирует имя по мере необходимости и внутренне создает для него атом.

Следующие строки взяты из примера generic.c из комплекта разработки для Windows 3.1 1994 года:

BOOL InitApplication(hInstance)
HANDLE hInstance;
{
    WNDCLASS  wc;
    /*...*/
    wc.lpszClassName = "GenericWClass"; /* Name used in call to CreateWindow. */
    return (RegisterClass(&wc));
}

Имя класса здесь является литеральной строкой только для чтения (если сегменты только для чтения существовали в 1994 году).

0 голосов
/ 29 декабря 2018

szAppName должен иметь такой же срок жизни, как и вся программа.Указатель на эту переменную передается и используется, даже когда WinMain возвращается.В противном случае это будет неопределенное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...