2009-09-21 12 views
24

Często się zastanawiałem, dlaczego C++ ma nazwę wchar_t zamiast po prostu wchar i nigdy nie byłem w stanie znaleźć odpowiedzi. Wyszukiwarki nie są pomocne, ponieważ myślą, że pytam o typ Windows "WCHAR. Jakieś pomysły?Dlaczego nazywa się "wchar_t", a nie po prostu "wchar"?

+0

Możesz chcieć zobaczyć, kiedy standard ANSI został napisany i kiedy MS dodał pochar do swojego kompilatora. Możliwe, że wchar_t rozróżnia to i wchar, który obsługuje MS. Mogę się mylić, więc zrobię to jako komentarz, więc nie będę przegłosowany. :) –

+3

Mam wrażenie, że standardowe komitety nie dbają o to, co robi MS, jak chciałby MS;) – Cogwheel

Odpowiedz

32

To jest dziedzictwo z C, gdzie wchar_t to typedef i typedef s mają ten przyrostek w C Standard Library.

+0

Dzięki. Nie zdawałem sobie sprawy, że był pierwotnie częścią C. – Cogwheel

+0

Ale stało się, gdy zbliżał się C++ i opracowano nowe standardy ISO. –

+0

Wiem, że jednym z celów projektowych C++ było pozostanie kompatybilnym ze standardowym C, jak to tylko możliwe. Rozumiem ich decyzję, chociaż nie mogę powiedzieć, że zgadzam się z tą szczególną motywacją. – Cogwheel

5

Myślę, że była to "faza" w dorastaniu C i C++. Pojawiło się zapotrzebowanie na nowe typy, ale dodawanie nowych słów kluczowych jest zawsze kwestionowane. Niektóre kod był już używany wchar, o wiele mniej kod użyłby wchar_t. Zauważ, że size_t i diff_t należą do tej samej ery.

11

Biblioteka standardowa C używa przyrostka _t dla wielu typów zdefiniowanych w bibliotece (w przeciwieństwie do typów, które są pieczone w C jako słowa kluczowe).

Na przykład, istnieje time_t, wchar_t, uint32_t, size_t, ptrdiff_t, div_t itp

odsetek (w każdym razie dla mnie) jest to, że standard C nie rezerwuje nazwy tej formie dla siebie. Standard C wskazuje, że nazwy zaczynające się od "str", "mem" i kilka innych prefiksów mogą być dodawane do standardu w przyszłości, ale nie ma to miejsca w przypadku nazw kończących się na "_t" - z tą różnicą, że nazwy, które zaczynają się od "int" lub "uint" i kończą się na "_t", mogą zostać dodane do <stdint.h> w przyszłości. Jednak POSIX zastrzega wszystkie nazwy, które kończą się na "_t".

Powiązane problemy