Dokładniej, dlaczego w wielu przypadkach jest to ta sama nazwa z wieloma różnymi nazwami i dlaczego typy wskaźnika (czasem zaciemniające logikę) są różne?Dlaczego wszystko w Windows API zostało wpisane?
Na przykład:
typedef const WCHAR *LPCWSTR, *PCWSTR;
Jaki jest sens tego?
Nie znam wszystkich szczegółów, ale myślę w 16-bitowych dniach w systemie Windows 3.1. Wówczas były dwa różne typy wskaźników, bliskie i dalekie wskaźniki. Zdefiniowali typy wskaźników dla każdego (odpowiednio "PCWSTR" i "LPCWSTR") dla jednolitego interfejsu. Ze względu na kompatybilność wsteczną, do której dążyła firma Microsoft, z tego powodu pozostaliśmy obaj z tych typów w interfejsie API. –
Prawdziwe pytanie brzmi: dlaczego usunięto inne typy wskaźników, które nie mają za daleko historii dalekiego wskaźnika? Takich jak HANDLE, HWND, HINSTANCE itp. O ile mi wiadomo, nie ma racjonalnej odpowiedzi na to pytanie. – Lundin
@Lundin: HANDLE, HWND i tak nie są w rzeczywistości wskaźnikami: są one nieprzezroczystymi uchwytami, które są prywatne dla niektórych części systemu Windows (USER, GDI, KERNEL). Za kulisami mogą być one faktycznie używane jako wskaźniki w wewnętrznych tabelach lub podobnych. Są one typowane jako puste * specjalnie po to, aby było jasne, że powinny być przekazywane tylko tak jak są, a kod nie powinien próbować ich interpretować (np. Poprzez robienie arytmetyki na nich - co byłoby łatwe do zrobienia przez przypadek, gdyby były wartościami int); inny cel niż to, co dzieje się z typedefs w powyższym qu. – BrendanMcK