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)