Ja, du solltest den richtigen Datentyp für die Argumente von Funktionen verwenden, sonst wirst du wahrscheinlich in Schwierigkeiten geraten.
Und der Grund, warum diese Typen so definiert sind, anstatt int
, char
und so weiter zu verwenden, ist, dass es das "wie groß der Compiler einen int
dimensioniert" aus der Schnittstelle des Betriebssystems entfernt. Das ist eine sehr gute Sache, denn wenn du Compiler A, oder Compiler B, oder Compiler C verwendest, werden sie alle dieselben Typen verwenden - nur die Headerdatei der Bibliotheksschnittstelle muss die richtigen Typen definieren.
Indem man Typen definiert, die keine Standardtypen sind, ist es einfach, z.B. int
von 16 auf 32 Bit zu ändern. Die ersten C/C++-Compiler für Windows verwendeten 16-Bit-Integer. Erst in den späten 1990er Jahren erhielt Windows eine 32-Bit-API, und bis zu diesem Zeitpunkt verwendete man int
, das 16-Bit war. Stell dir vor, du hast ein gut funktionierendes Programm, das mehrere hundert int
-Variablen verwendet, und plötzlich musst du ALLE diese Variablen auf etwas anderes ändern... Wäre nicht sehr nett, oder - besonders da EINIGE dieser Variablen NICHT geändert werden müssen, weil die Umstellung auf ein 32-Bit-Int für einen Teil deines Codes keinen Unterschied machen wird, also kein Grund, diese Teile zu ändern.
Es sei darauf hingewiesen, dass WCHAR
NICHT dasselbe ist wie const char
- WCHAR
ist ein "wide char", also ist wchar_t
der vergleichbare Typ.
Also, im Grunde genommen ist das "Definieren unseres eigenen Typs" eine Möglichkeit zu garantieren, dass es möglich ist, die zugrunde liegende Compiler-Architektur zu ändern, ohne (viel von dem) Quellcode ändern zu müssen. Alle größeren Projekte, die maschinenabhängiges Codieren durchführen, verwenden diese Art von Vorgehen.