Pourquoi cette foultitude dans les types ? [API Windows] - C++ - Programmation
Marsh Posté le 09-12-2002 à 13:35:48
j'utilise les types demandés par les fonctions de l'API, genre si la fonction veut un CHAR je lui donne un CHAR
Mais je dois de toute façon convertir ça à partir de LongString/AnsiString/WideString
Marsh Posté le 09-12-2002 à 13:37:01
Waouh, rapide monsieur P. Cela étant, pourquoi a t'on besoin d'une telle quantité de type ?
Marsh Posté le 09-12-2002 à 13:40:31
Tiens j'en ai oublié dans les char et autres :
PTCHAR, LPWSTR, LPTCH, PTCH, PTSTR, LPTSTR, LPCWSTR LPCTSTR, LPSTR, LPTCH, PTCH, PTSTR, LPTSTR, LPCSTR, LPCTSTR !
Si y a des doublons, j'en suis désolé.
Marsh Posté le 09-12-2002 à 13:47:26
ben ca montre le niveau d'intelligence des dev de windows. et puis au moins, vu le nombre de trucs incohérent dans l'API, je ne vois qu'une explication. vu le nombre de bordels, la question de la maintenance du code ne se pose meme pas: on en rajoute une couche a chaque fois avec une nouvelle batterie de type. c'est sans fin. y a que microsoft pour réinventer les char
et pis quand ils développaient de nouveux types de données, leur spec devait etre tellement beton, le comportement tellement bien défini maitrisé et compris ), qu'il etait impossible d'apporter de modifications. ou alors les programmeurs etaient autistes et avaient chacun l'ambition de réinventer l'o chaude.
je ne vuaillon po d'otreu aisplikation
Marsh Posté le 09-12-2002 à 13:52:37
En fait l'un des problèmes de Windows, c'est que le soft n'est pas unique, mais se décline en plusieurs versions. D'après ce que Petzold explique dans son best seller, Windows 98 contrairement à NT ne supporte pas Unicode, d'où une première dualité sur les identificateurs. Ensuite, il y a parmi les identificateurs un certain nombre de macros pour adresser ce problème de dualité. Cependant cela ne me satisfait pas comme raisonnement. Même en divisant par trois le nombre des identificateurs, ça fait trop. D'où ma question.
Marsh Posté le 09-12-2002 à 13:57:11
ben le developpement a manqué de synchronisation et les developpeurs n'ont pas su factoriser leur code et voir ce qui pouvait servir ailleurs. alors chacun a fait sa petite sauce pour un problème donné sans penser à un truc générique
Marsh Posté le 09-12-2002 à 14:02:48
Moralité ! Mais là n'est pas le sujet. Si des gurus trainent dans le coin... Même ceux de developpez.com (OK, spadrole) !
Marsh Posté le 09-12-2002 à 14:03:00
Taz@PPC a écrit : pareil en C++, ya plein de types à la con dans tous les sens genre les CString.... |
spourça le C c'est mieux : C'est "char" tout le temps mais défois y'a une "*" ...
Marsh Posté le 09-12-2002 à 14:03:07
j'ai un début d'explication car il m'arrive parfois d'utiliser ce type de notation. Les préfixes donnent un renseignement sur le type de données manipulées (jusque là j'assume que vous le saviez déjà )
LP = Long Pointer
P = Pointer (short?)
C = Constant?
par contre le T je vois pas bien ce que ça veut dire.
WCHAR ce serait pas un caractère unicode?
NP je vois pas bien non plus mais à mon avis il y a une explication logique derrière tout ça. Je ne pense pas, contrairement à l'avis général, que ce soit un brol quelconque fait sans concertation (du moins j'aime à le croire)
Je vois pas, par contre, pas la différence entre PCHAR et PCH.
Marsh Posté le 09-12-2002 à 14:05:11
drasche a écrit : j'ai un début d'explication car il m'arrive parfois d'utiliser ce type de notation. Les préfixes donnent un renseignement sur le type de données manipulées (jusque là j'assume que vous le saviez déjà ) |
ben perso je préfère lire "char *" que "LPCSTR"
Marsh Posté le 09-12-2002 à 14:06:11
Alors si j'ai bien suivi ce que j'ai appris de Petzold, WCHAR c'est le pendant de char ou CHAR pour Unicode, et TCHAR c'est une macro pour parler de char ou WCHAR selon que UNICODE est défini dans le programme (un #define donc).
Marsh Posté le 09-12-2002 à 14:06:27
DarkOli a écrit : |
heu tous les types cités par Cherrytree sont des types C vu que l'API Windows est à la base pour du C
Marsh Posté le 09-12-2002 à 14:07:40
drasche a écrit : |
NP = null pointer, c'est pour quand tu veux mettre des bugs dans ton code. Logique que ce soit prévu au niveau de l'API Windows
Marsh Posté le 09-12-2002 à 14:08:20
Sinon, pourquoi faire une distinction entre les suffixes CHAR, CH et STR. C'est certainement évident, mais je vois pas.
Marsh Posté le 09-12-2002 à 14:17:58
ben CHAR pour un simple char et STR pour toute une chaîne de caractères. En C il y a une différence subtile en ce sens qu'on utilise les simple quotes (' pour un simple char et les double quotes (" ) pour les chaînes de caractères. (mais ça n'a probablement rien à voir )
Marsh Posté le 09-12-2002 à 14:24:26
lorill a écrit : |
Sauf que LPCSTR ajoute la notion de chaine CONSTANTE pour le compilateur...
Marsh Posté le 09-12-2002 à 14:26:44
El_Gringo a écrit : |
On peut toujours recourir au spécificateur const, donc je suis pas sûr que ce soit bien vu d'avoir créé un nouvel identificateur.
Marsh Posté le 09-12-2002 à 14:32:57
Cherrytree a écrit : On peut toujours recourir au spécificateur const, donc je suis pas sûr que ce soit bien vu d'avoir créé un nouvel identificateur. |
Ben, c'est plus concis d'avoir un type pour ça.
Dans certaines normes de programmation C (je sais pas si ça fait partie des normes officielles), on dit que, pour chaque nouveau typedef, on doit définir un type pointeur sur ce type (préfixé par LP). Moi je trouve pas si mal l'histoire du LPC pour "const". Quand on à l'habitude, c plus rapide.
Marsh Posté le 09-12-2002 à 14:34:25
Taz@PPC a écrit : ben le developpement a manqué de synchronisation et les developpeurs n'ont pas su factoriser leur code et voir ce qui pouvait servir ailleurs. alors chacun a fait sa petite sauce pour un problème donné sans penser à un truc générique |
au contraire je pense plutôt qu'il s'agissait de définir des standards au niveau typage. Evidemment ça ne sert à rien au niveau d'un simple EXE mais dès lors qu'on s'attaque aux DLLs, il y a grandement intérêt à ne pas se mélanger les pinceaux au niveau des types pointeurs, et je pense que c'est précisément ce qu'ils ont voulu éviter. Faut pas oublier que la moyenne d'âge des développeurs chez MS est extrêmement basse (moi même je crois que je suis bon pour la retraite ) et donc, programmeurs peu expérimentés...
Marsh Posté le 09-12-2002 à 14:44:39
CHAR = 8 bits
WCHAR = 16 bits
PCHAR, LPCH, PCH, NPSTR, LPSTR, PSTR = Pointeur sur des chars (ou des strings) de 8 bits avec les distinctions entre les deux tailles de pointeurs qui coexistent sous les windows 16 bits.
LPCCH, PCCH, LPCSTR, PCSTR = même chose pour des constantes.
PWCHAR, LPWCH, PWCH, NWPSTR, LPWSTR, PWSTR = Pointeur sur des chars (ou des strings) de 16 bits .
WCHAR, LPCWCH, PCWCH, LPCWSTR, PCWSTR = même chose pour des constantes.
TCHAR (et ses déclinaisons) est le mode générique...Si UNICODE est définit, il équivaut à WCHAR.
etc.
Autrement dis, tout a une raison ( ou...presque ) La raison principale étant d'avoir des types dont le codage est fixe (sur 8 bits, sur 16, etc.)
Marsh Posté le 09-12-2002 à 14:47:16
drasche a écrit : |
Les programmeurs de MS sont tous un peu des têtes qui sortent de la plupart des grosses universités...et ces mecs là n'y rentrent même pas en temps que programmeurs mais en tant que QA après avoir passé 7 entretiens!
La moyenne d'âge est basse chez les programmeurs de base mais pas l'intelligence
Marsh Posté le 09-12-2002 à 14:48:35
Je me la garde pour vendredi celle-là
Marsh Posté le 09-12-2002 à 14:51:39
sachant que ms, comme les autres, recrute des ingenieurs tout juste diplomés, qui n'ont jamais eu le moindre cours d'informatique, y'a de quoi...
Marsh Posté le 09-12-2002 à 14:55:37
lorill a écrit : sachant que ms, comme les autres, recrute des ingenieurs tout juste diplomés, qui n'ont jamais eu le moindre cours d'informatique, y'a de quoi... |
décidement la rumeur est tenace
Marsh Posté le 09-12-2002 à 14:57:08
Willyzekid a écrit : |
Spa une rumeur ...
Marsh Posté le 09-12-2002 à 14:57:43
Willyzekid a écrit : |
tu veux que je te montre les papiers qu'a reçu ma soeur ?
Ms, ingésoft, et d'autres...
Marsh Posté le 09-12-2002 à 14:59:06
lorill a écrit : |
huh? oui montre je suis curieux !
Marsh Posté le 09-12-2002 à 15:00:28
Willyzekid a écrit : |
faudra au moins attendre ce week end, et voir si elle l'a pas basardé. je vais essayer d'y penser, sinon MP moi samedi pour me le rappeler
Marsh Posté le 09-12-2002 à 15:01:05
ya eu une émission (envoyé spécial si g bonne mémoire) qui parlait beaucoup de la vie après MS. La réponse est sûrement là-dedans? Ingé info ou ingé tout court? Chez nous on prend de tout. Ingés infos, ingés en chimie, commercial, des mines, etc... Pourquoi MS ferait-il différemment?
Marsh Posté le 09-12-2002 à 15:03:18
drasche a écrit : ya eu une émission (envoyé spécial si g bonne mémoire) qui parlait beaucoup de la vie après MS. |
c'était sur arte, et ca parlait que de ceux devenus millionaires et plus motivés du tout
Marsh Posté le 09-12-2002 à 15:03:24
drasche a écrit : ya eu une émission (envoyé spécial si g bonne mémoire) qui parlait beaucoup de la vie après MS. |
Je l'ai vu. Ca faisait très "pauvre petite fille riche" quand même.
Marsh Posté le 09-12-2002 à 15:05:36
drasche a écrit : Chez nous on prend de tout. Ingés infos, ingés en chimie, commercial, des mines, etc... Pourquoi MS ferait-il différemment? |
Parce que MS quand ils font leur recrutement ont l'embarras du choix...
Marsh Posté le 09-12-2002 à 15:10:51
Willyzekid a écrit : CHAR = 8 bits |
OK, ça tient debout.
Maintenant, dans une famille comme par exemple : PCHAR, LPCH, PCH, NPSTR, LPSTR, PSTR pourquoi autant d'identifiants ? ça en fait 6 pour pointer des chars. Alors tu dis que c'est pour faire la distinction entre deux tailles de pointeurs. Moi je réponds qu'il y en a peut-être 4 de trop alors. Non ?
Marsh Posté le 09-12-2002 à 15:46:19
Moi je vois pas la différence entre CH et CHAR. Par contre clairement, on peut pointer sur un CHAR ou un STRing, la différence peut être pertinente.
Marsh Posté le 09-12-2002 à 17:01:04
drasche a écrit : Moi je vois pas la différence entre CH et CHAR. Par contre clairement, on peut pointer sur un CHAR ou un STRing, la différence peut être pertinente. |
J'uppe à tous hasards. Cette question est intéressante.
De plus vos habitudes de programmation (faites-vous comme antp ? avez-vous une autre manière de faire ?) m'intéressent. Donc up.
Marsh Posté le 09-12-2002 à 17:02:36
bhen s'ils font comme moi c'est qu'ils utilisent Delphi, ou à la limite C++Builder
Marsh Posté le 09-12-2002 à 13:34:36
CHAR, TCHAR, WCHAR, PCHAR, LPCH, PCH, NPSTR, LPSTR, PSTR, LPCCH, PCCH, LPCSTR, PCSTR...
Pourquoi ? Quel usage ? Vous faites comment vous ?
---------------
Le site de ma maman