sizeof(int) <= sizeof(long). C'est tout ce qui les différencie officiellement. Après, cela dépend de la plateforme.
C'est ça qui est énervant en fait. C'est défini n'importe comment, il n'y a aucune logique et rien n'est garanti nulle part.
Parce que si je suis bien, le standard dit juste que 1 = sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long).
Donc sizeof(long long) peut être = 1, et on peut avoir n'importe quoi entre deux… la seule chose de sûre à 100% c'est sizeof(char)=1.
ON ne va pas réinventer les types, mais c'est dommage que les relations ne soient pas des égalités strictes. Ca aurait été beaucoup plus clair, ça aurait fixé quasiment d'office sizeof(short)=2, sizeof(long)=4 et sizeof(long long)=8; en sortant éventuellement le type int du lot pour qu'il corresponde toujours à la taille d'entier optimale (d'ailleurs, c'est longtemps la définition qu'on m'a donné pour le type int: un entier dont on ne se soucie pas en détail des bornes mais qui est toujours optimal pour le processeur peu importe la plateforme; et donc du même coup, adieu int_fast_t et autres).
De même, si je pige bien, on a aussi sizeof(float) <= sizeof(double) <= sizeof(long double).
Donc parfois on peut avoir sizeof(double) == 4 et sizeof(long double) == 4.
Je serais tenté de dire que c'est Windows qui a fait un mauvais choix, mais bon.
JE pense que si on a hérité de ce nom, c'est surtout pour des raisons historiques. Dans la même logique, on a DWORD et QWORD pour unsigned long et unsigned long long.
Ca se comprend: word = groupe de 2 bytes, et double word = groupe de 4 bytes, et ça correspond à l'asm intel.
Tu veux parler du fait que l'API Windows utilise ce type ?
Ben oui, abondamment même, dans les logiciels modernes et biens conçus. L'unicode (enfin, UTF-16 modifié à la sauce Microsoft) est censé être la norme depuis Windows XP au moins (peut-être même 2000).
En réalité on n'utilise pas wchar_t mais WCHAR… parce que l'API windows est le spécialiste pour ajouter plein de typedef; mais c'est pareil.