Warnung, aber warum???



  • Hallo,
    ich habe einen "kleinen" Code bei dem eine Warnung ausgegeben wird, ich weis nicht warum, könnt ihr mir eine erklärung geben?

    //ddraw.lib, dxguid.lib einbinden und min. DX8SDK
    
    // Headerdatei einbinden
    #include <windows.h> 
    #include <ddraw.h>
    //Auflösung/Farbtiefe wählen
    #define AufloesungX 800
    #define AufloesungY 600
    #define Farbtiefe 8
    //Prototypen=============================================================================================
    // Anwendungsfenster erzeugen
    HWND CreateMainWindow(HINSTANCE hInstance);
    //Callback Funktion zur Nachrichtenbehandlung
    LRESULT CALLBACK MessageHandler(HWND Fensterhandle, UINT msg, WPARAM wparam, LPARAM lparam);
    // Fehlermeldung erzeugen
    BOOL  Error(char* Fehlermeldung);
    // DirectDraw-Objekte initialisieren
    BOOL InitDirectDraw(HWND Fensterhandle);
    // Objekte/Speicher freigeben
    void CleanUpDirectDraw(void);
    //Variablen==============================================================================================
    //DirectDrawObject
    LPDIRECTDRAW7 DirectDraw7Objekt = NULL;
    //DirectDrawPrimäreOberfläche
    LPDIRECTDRAWSURFACE7 PrimaereOberflaeche=NULL;
    //StrukturOberflächenbeschreibung
    DDSURFACEDESC2 Oberfaechenbeschreibung;
    // Der Fensterhandle
    HWND Fensterhandle = NULL;
    // Der DeviceContextHandle
    HDC DeviceContextHandle;
    //Verweis auf Paintstruct
    PAINTSTRUCT ps;
    // Windows main-Funktion
    int WINAPI WinMain(HINSTANCE hInstance,      // Handle der Programminstanz
                       HINSTANCE hPrevInstance,  // Handle der letzten Instanz
                       LPSTR lpCmdLine,          // Kommandozeile
                       int nCmdShow)             // Art wie das Fenster angezeigt werden soll
    {   
        // Fenster erzeugen und Handle speichern
        Fensterhandle = CreateMainWindow(hInstance);
    
        // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
        if(0 == Fensterhandle)
        {
    		return Error("Fenster konnte nicht erzeugt werden");
        }
    
        // DirectDraw initialisieren
        if(!InitDirectDraw(Fensterhandle))
        {
            return FALSE;
        }        
    
        // DC für die Oberfläche anfordern
        if(FAILED(PrimaereOberflaeche->GetDC(&DeviceContextHandle)))
        {
            Error("DC ist nicht verfügbar");
        }
    
    	// Struktur, in der Informationen zur Nachricht gespeichert werden
        MSG msg;
    
        // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
        while(GetMessage(&msg,NULL,0,0))
    	{
        		// Nachricht an die Callbackfunktion senden
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
        }
    
        // Rückgabewert an Windows
        return 0;
    }
    
    // Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht
    // für Ihr Programm vorliegt
    LRESULT CALLBACK MessageHandler(HWND Fensterhandle, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        // testen, um welche Nachticht es sich handelt
        switch(msg)
        {
    	case WM_PAINT:
    		BeginPaint(Fensterhandle,&ps);
    		DeviceContextHandle = GetDC(Fensterhandle);
    		// Textfarbe und Ausgabemodus setzen
    		SetTextColor(DeviceContextHandle,RGB(255,255,255));
    		SetBkMode(DeviceContextHandle,TRANSPARENT);
    	    // Text und Ellipse ausgeben
    		TextOut(DeviceContextHandle,20,200, "c++ rules",9);
    	    // Wichtig !!! Device Context wieder freigeben
    		PrimaereOberflaeche->ReleaseDC(DeviceContextHandle);
            EndPaint(Fensterhandle,&ps);
    		break;
    
    	case WM_KEYDOWN:
    				if(wParam==VK_ESCAPE)
    				{
    					DestroyWindow(Fensterhandle);
    					break;
    				}
    
            // wenn das Fenster geschlossen wird, eine Nachricht senden,
            // die das Programm beendet
            case WM_DESTROY:
    			CleanUpDirectDraw();
                        PostQuitMessage(0);
    					return 0;
                    break; 
    
    	}
    
        // Wenn wir uns nicht um die Nachricht gekümmert haben
        // wird sie an die Standardnachrichtenverarbeitung von Windows
        // geschickt
        return (DefWindowProc(Fensterhandle, msg, wParam, lParam));
    }
    
    /*======================================================================================================
    ==========================================Funktion Fensterstellung======================================
    ======================================================================================================*/
    HWND CreateMainWindow(HINSTANCE hInstance)
    {
        WNDCLASSEX wndClass;                                   // WNDCLASSEX Struktur
    
        // Struktur initialisieren
        wndClass.cbSize        = sizeof(WNDCLASSEX);           // Größe angeben (nie vergessen!)
        wndClass.style         = CS_DBLCLKS | CS_OWNDC |
                                 CS_HREDRAW | CS_VREDRAW;      // Standard Stile
        wndClass.lpfnWndProc   = MessageHandler;               // Die Callback Funktion angeben
    
        wndClass.cbClsExtra    = 0;                            // Zusätzliche Angaben, wird nicht benötigt
        wndClass.cbWndExtra    = 0;                            // Zusätzliche Angaben, wird nicht benötigt
        wndClass.hInstance     = hInstance;                    // Anwendungsinstanz
    
        wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);// Weisser Pinsel
        wndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);  // Normaler Cursor
        wndClass.lpszMenuName  = NULL;                         // Das Fenster hat kein Menü
        wndClass.lpszClassName = "WindowClass";                // Der Name der Klasse
        wndClass.hIcon         = LoadIcon(NULL, IDI_WINLOGO);  // Windows Logo
        wndClass.hIconSm       = LoadIcon(NULL, IDI_WINLOGO);  // Windows Logo
    
        RegisterClassEx(&wndClass);
    
        return CreateWindowEx(NULL,							 // Keine erweiterten Stile nutzen
                              "WindowClass",				 // Klassenname
                              "DKEngine v1Alpha1",			 // Fenstertitel
                              WS_POPUP |		        	 // Fenster
                              WS_VISIBLE,                    // Eigenschaften
                              0, 0, AufloesungX, AufloesungY,// Anfangsposition und Größe
                              NULL,							 // Handle des Elternfensters
                              NULL,							 // Handle des Menüs
                              hInstance,					 // Anwendungsinstanz
                              NULL);						 // wird nicht benötigt
    }
    
    /*======================================================================================================
    =====================================Funktion DirectDraw intitialisieren================================
    ======================================================================================================*/
    
    int InitDirectDraw(HWND Fensterhandle)
    {
    	//DirectDrawObjekt
    	if(FAILED(DirectDrawCreateEx(NULL,(LPVOID*)&DirectDraw7Objekt,IID_IDirectDraw7,NULL)))
        { 
    		return Error("DirectDraw-Objekt konnte nicht erzeugt werden"); 
    	}
    	//Cooperatiosebene
    	if(FAILED(DirectDraw7Objekt->SetCooperativeLevel(Fensterhandle,DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE)))
    	{
    		return Error("DirectDraw-Kooperationsebene konnte nicht gesetzt werden werden");
    	}
    	//Auflösung/Farbtiefe DirectDraw
    	if(FAILED(DirectDraw7Objekt->SetDisplayMode(AufloesungX,AufloesungY,Farbtiefe,0,0)));
    	//InitundGrößefestlegen
    	ZeroMemory(&Oberfaechenbeschreibung,sizeof(Oberfaechenbeschreibung));
    	Oberfaechenbeschreibung.dwSize =sizeof(Oberfaechenbeschreibung);
    	Oberfaechenbeschreibung.dwFlags=DDSD_CAPS;
    	//Es soll eine Primäre Oberfläche sein
    	Oberfaechenbeschreibung.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;
    	//Primäre Oberfläche Anlegen
    	if(FAILED(DirectDraw7Objekt->CreateSurface(&Oberfaechenbeschreibung,&PrimaereOberflaeche,NULL)))
    	{
    		MessageBox(0,"Primäre DirectDraw-Oberfläche konnte nicht erzeugt werden werden","Fehler",MB_OK);
    		return 0;
    	}
        return TRUE;
    }
    /*======================================================================================================
    ==========================================Funktion DirectDraw löschen===================================
    ======================================================================================================*/
    void CleanUpDirectDraw(void)
    {
        if(NULL != PrimaereOberflaeche)
        {
            PrimaereOberflaeche->Release();
            PrimaereOberflaeche = NULL;
        }
    
        if(NULL != DirectDraw7Objekt)
        {
            DirectDraw7Objekt->Release();
            DirectDraw7Objekt = NULL;
        }
    }
    
    /*======================================================================================================
    ==========================================Funktion Fehlermeldung========================================
    ======================================================================================================*/
    BOOL Error(char* Fehlermeldung)
    {
        // als MessageBox
        MessageBox(0,Fehlermeldung,"Error",MB_OK);
         // und in das Ausgabefenster
        OutputDebugString(Fehlermeldung);
        OutputDebugString("\n");
        return FALSE;
    }
    


  • Müssen wir jetzt alle Deinen Code selber compilen und hoffen, das wir dieselben Warnungen bekommen oder sagst Du uns auch, was für Warnungen da bei Dir kommen? 🙄



  • Sorry 😞 , hab ich vergessen, bitte:
    warning C4390: ';' : empty controlled statement found; is this the intent?
    der Fehler kommt auch wen ich DDSURFACEDESC2 Oberfaechenbeschreibung; in der Funktion: int InitDirectDraw(HWND Fensterhandle) kompiliere.



  • In welcher Zeile kommt denn die Warnung?

    So aus dem Stegreif hat diese Zeile etwas sehr verdächtiges an sich:

    if(FAILED(DirectDraw7Objekt->SetDisplayMode(AufloesungX,AufloesungY,Farbtiefe,0,0)));
    


  • Das würde zur Beschreibung passen 😉
    Ist aber erlaubt, deswegen auch nur eine Warnung, die dich fragt, ob das Absicht ist (weil es nicht viel Sinn macht)



  • if(FAILED(DirectDraw7Objekt->SetDisplayMode(AufloesungX,AufloesungY,Farbtiefe,0,0)));
    

    ohh dasif macht ja gar kein sin. Mein Fehler, aber doch verwunderlich das er keinen ERROR anzeigt



  • Gott der 2. schrieb:

    aber doch verwunderlich das er keinen ERROR anzeigt

    Wieso? Ist doch vom Syntax her nicht falsch - solche Nullanweisungen sind erlaubt, machen aber so zumindest keinen Sinn 😉



  • empty controlled statement found; is this the intent?

    Übersetzung:
    Leere kontrollierte Aussage gefunden; Ist das Absicht?

    Er fragt Dich lediglich, ob das Dein Ernst ist... falsch ist es nicht, macht aber (wie mehrfach hier erwähnt) wirklich keinen Sinn, das weiß der Compiler und fragt Dich halt...



  • ich sollte mir ma ein deutsches c++ zulegen 😃


Anmelden zum Antworten