Das erste C-Programmbeispiel am Anfang des klassischen Tutorials „The C Programming Language“, das von Kernighan und Ritchie gemeinsam verfasst wurde, besteht darin, ein einfaches „Hallo Welt“ zu drucken. Seitdem ist „Hallo Welt“ zum Synonym für die Beschreibung des ersten Programms geworden, das ein Mensch schreibt – unabhängig von der Sprachtechnologie, auch wenn das Programm die Worte „Hallo Welt“ nicht tatsächlich im Text ausgibt.
Für Anfänger ist dieses „Hallo Welt“-Programm beängstigend. Er wird denken: „Ich muss sehr dumm sein. Selbst das einführende Hallo-Welt-Programm fällt mir schwer. Wenn das so weitergeht, wird mir das Programmieren nicht gefallen.
Tatsächlich liegt der Grund für dieses Problem darin, dass wir „Der Erste“ wird mit „Der Einfachste“ verwechselt. Das „Hallo Welt“-Programm kann ein beliebiges Programm ohne Schwierigkeitseinschränkungen sein. Wenn Sie zum ersten Mal programmieren, wissen Sie nicht, welchen Compiler Sie verwenden sollen, wohin Ihre Codedateien gehen sollen, welches Format sie haben sollen usw. Du musst lernen. Vieles Wissen muss erlernt und langsam erlernt werden, bevor man wirklich programmieren kann.
Als ich anfing, Programmieren zu lernen, hoffte ich immer, so schnell wie möglich über die Phase des Schreibens von „Hallo Welt“-Programmen hinauszukommen und sofort mit dem Schreiben wirklich nützlicher Programme beginnen zu können. Aber tatsächlich verbrachte ich den größten Teil meines Lebens damit, „Hallo Welt“-Programme zu schreiben, ohne dass ein Ende in Sicht war.
Wann immer über das „Hallo Welt“-Programm gesprochen wird, ist es fast unvermeidlich, über das schrecklichste „Hallo Welt“-Programm der Welt zu sprechen: das, das Charles Petzold in seinem Buch „Programming Windows“ beschrieben hat Windows-Programm. Ich kann nur die Windows 98-Version dieses Buches finden. Ich weiß nicht, wie sehr es sich von der Originalversion unterscheidet, aber ich habe den Eindruck, dass der Code in der Originalversion gruseliger wäre als dieser.
/*------------------------------------------------------------ HELLOWIN.C -- Displays "Hello, Windows 98!" in client area (c) Charles Petzold, 1998 ------------------------------------------------------------*/ #include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("HelloWin") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, // window class name TEXT ("The Hello Program"), // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL) ; // creation parameters ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_CREATE: PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ; return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }