请告诉我:为什么下面的代码中的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 ;
//...
答案 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返回,也会传递和使用指向此变量的指针。否则将是未定义行为。