2009-09-21 5 views
24

Je me suis souvent demandé pourquoi C++ est allé avec le nom wchar_t au lieu de simplement wchar, et je n'ai jamais été capable de trouver une réponse. Les moteurs de recherche ne sont d'aucune aide car ils pensent que je pose des questions sur le type de Windows WCHAR. Des idées?Pourquoi est-il appelé 'wchar_t' et pas simplement 'wchar'?

+0

Vous pourriez vouloir voir quand la norme ANSI a été écrite et quand MS a ajouté le wchar à leur compilateur. Il se peut que wchar_t fasse la distinction entre cela et wchar supporté par MS. J'ai peut-être tort, alors je vais le faire comme commentaire, donc je ne suis pas déprimé. :) –

+3

J'ai l'impression que les comités standards ne se soucient pas autant de ce que MS fait que MS voudrait croire;) – Cogwheel

Répondre

32

C'est un héritage de C, où wchar_t est un typedef, et typedef s ont ce suffixe dans la bibliothèque standard C.

+0

Merci. Je n'avais pas réalisé que c'était à l'origine une partie de C. – Cogwheel

+0

Mais c'est arrivé quand le C++ arrivait et que de nouvelles normes ISO étaient élaborées. –

+0

Je sais que l'un des objectifs de conception de C++ était de rester aussi compatible avec le standard C que possible. Je peux comprendre leur décision, même si je ne peux pas dire que je suis d'accord avec cette motivation particulière. – Cogwheel

5

Je pense que c'était une «phase» dans la croissance de C et C++. Le besoin de nouveaux types a été ressenti mais l'ajout de nouveaux mots-clés est toujours contesté. Un code utilisait déjà wchar, beaucoup moins de code aurait utilisé wchar_t. Notez que size_t et diff_t sont de la même époque.

11

La bibliothèque standard C a utilisé le suffixe _t pour la plupart des types définis dans la bibliothèque (par opposition aux types qui sont cuits dans C lui-même en tant que mots-clés).

Par exemple, il y a time_t, wchar_t, uint32_t, size_t, ptrdiff_t, div_t, etc.

intérêt (pour moi en tout cas) est que la norme C ne réserve pas les noms de cette forme elle-même. La norme C indique que les noms qui commencent par "str", "mem" et quelques autres préfixes pourraient être ajoutés à la norme à l'avenir, mais il ne fait pas de même avec les noms qui se terminent par "_t" - sauf que les noms commençant par "int" ou "uint" et se terminant par "_t" pourraient être ajoutés à <stdint.h> dans le futur. Cependant, POSIX réserve tous les noms qui se terminent par "_t".

Questions connexes