为什么将char []设为静态

时间:2018-12-29 11:05:08

标签: c

请告诉我:为什么下面的代码中的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 :(得分:0)

没有理由将其设为静态(全局)变量。 Windows API并未在任何地方指定此要求。 Windows API似乎只是根据需要复制名称,并在内部为其创建原子。

以下几行摘自1994 Windows 3.1开发工具包的generic.c示例:

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

此处的类名称是只读文字字符串(如果1994年存在只读段)。

答案 1 :(得分:-1)

szAppName的生存期必须与整个程序相同。即使WinMain返回,也会传递和使用指向此变量的指针。否则将是未定义行为。