Verständnisfrage zur Rückgabe von Zeigern



  • Bitte nicht meckern, das folgenden Beispiel habe ich aus einem DirectX Beispiel entnommen. Ich habe nur ein paar Veränderungen an den Datentypen gemacht so dass es kompbtibel mit dem Standard C ist.

    So würde ich nie programmieren!!!

    char* D3DDevTypeToString(int devType)
    {
        switch (devType)
        {
        case D3DDEVTYPE_HAL:        return "D3DDEVTYPE_HAL";
        case D3DDEVTYPE_SW:         return "D3DDEVTYPE_SW";
        case D3DDEVTYPE_REF:        return "D3DDEVTYPE_REF";
        default:                    return "Unknown devType";
        }
    }
    

    Meine Verständnisfrage: Warum funktioniert das Ganze ?



  • Weil die Texte zwischen den " Stringliteral sind.
    Ist das im Prinzip das gleiche wie.

    char *text = "Hallo";
    // oder
    strcpy(array, "Welt!");
    

    Diese Texte sind ja auch irgendwo abgespeichert und du bekommst den Zeiger auf diese Stelle geliefert.



  • Bitte ein Bit schrieb:

    So würde ich nie programmieren!!!

    Warum nicht? Außer dass da ein const fehlt und int vielleicht unsigned sein sollte, ist doch alles ok?



  • Warum nicht? Außer dass da ein const fehlt und int vielleicht unsigned sein sollte, ist doch alles ok?

    Klar das Beispiel gibt nicht viel her außer:

    strcpy(D3DDevTypeToString(D3DDEVTYPE_HAL), "Hallo");
    

    und int vielleicht unsigned sein sollte, ist doch alles ok?

    Wohl eher ein Enum sofern man nicht auf jedes Byte achten soll. 😉

    Aber im groben und Ganzen sind die Beispiele der DirectX SDK in einem schelchten Stil schlecht. Exzessiven C Code in einer C++ Datei, keine const Correctness, Zeiger werden generell nicht überprüft,...

    if (false == m_pd3dInitialized)
    

Anmelden zum Antworten