Standard C / WinAPI



  • Hallo,

    mich würde mal interessieren ob ihr in euren WinAPI Projekten versucht möglichst viel in standard C zu schreiben oder möglichst viel WinAPI zu nutzen?

    Beispiele:
    char vs CHAR
    char * vs LPSTR
    unsigned int vs DWORD
    fopen vs CreateFile



  • Der Großteil meiner Sourcen besteht meistens aus WINAPI-Funktionen, für die es kein Standard-C-Ersatz gibt (ist ja klar: Windows-Programmierung). Aus diesem Grund verzichte ich auch ansonsten auf die ANSI-Funktionen. Nur auf die str-Funktionen kann ich noch nicht verzichten (strlen/ sprintf), was wahrscheinlich Gewohnheit ist. Und weil ich in der WINDOWS-Programmierung meistens WINAPI-Funktionen nutze, die WINAPI-Datentypen erwarten und zurückgeben, benutze ich selber auch die WINAPI-Datentypen (z.B. BOOL statt bool). Außerdem sind viele WINAPI-Datentypen kürzer als die ANSI-Typen: DWORD statt unsigned int und WORD statt unsigned short.


  • Mod

    Auf Dateifunktionen in der CRT verzichte ich ganz. Dazu gibt es bessere Klassen in der C++ IO Library oder in der MFC.
    Stringfunktionen teilweise. Eher verwende ich String Klassen (CString/std::string).

    Datentypen wie DWORD benutze ich gerne in Datenstrukturen, die auch eine gewisse Uniformität benötigen. Für mich sind sich auch oft sprechender als unsigned long. Aber das ist Gewohnheit, wenn man Jahre in der Windows Welt verbringt.

    char vermeide ich. Ich versuche TCHAR in den meisten Fällen zu benutzen außer ich benötige explicit wchar_t oder char.

    Um so näher ich an Windows Elementen arbeite um so mehr ist man auch gewöhnt entsprechende Datentypen zu verwenden...



  • Ok, danke schonmal für die Antworten.
    Es sollte vielleicht angemerkt werden dass ich (zumindest momentan) nur in C schreibe und mir daher weder MFC noch iostream zur Verfügung stehen.

    Gibt es so also eine Möglichkeit sprintf/strlen zu ersetzen? (_user schrieb dass er es wohl nur aus Gewohnheit nicht ersetzt?)



  • Die str-Funktionen können durch die StringCb-Methoden ersetzt werden (find ich persönlich aber etwas aufwändig oder ich bin zu konservativ), z.B.:

    StringCbLength
    StringCbPrintf



  • Viele der genannten Dinge sind nur Macros aus windows.h erkenntlich aus den Grossbuchstaben. Wenn man nicht dort nachsehen möchte, was dahinter steckt, verwendet man sie besser. Ansonsten ist die Schnittstelle der WinApi StandardC.

    strlen brauchst du nicht zu ersetzen solange du C-Strings einsetzt.
    sprintf kann man auch weiter einsetzen, oft aber sind die Streamklassen von C++ dafür besser.


Anmelden zum Antworten