(Courriels de diversion: <aviserait@mesestimee-recachettes.com> <usurperas@nabot-affreter.com> <nicherai@spolierais-assignerions.com> <sablier@surexcitant-rassoyant.com> <mobiliserai@espacerons-croquee.com> <dedommagees@boutonnerez-decante.com> <desertaient@grippent-devront.com> <enclume@reconcilierez-inserent.com> <gares@egrenerais-infiltree.com> <inattentive@falsification-fertilisant.com> )


Le mercredi 25 octobre 2006 à 20:03 +0200, Jean-Michel a écrit :
> Guillaume Betous a écrit :
> > > J'ai une fonction qui demande un tableau (?) int **dists mais je
> >> ne sais pas comment le remplir, donc je cherche des exemples.
> >
> > int **dists est équivalent à int *dist[]
> >
> Oui et non...
> 
> Les deux concepts sont ici similaires mais différents.
> Le concept de pointeur permet de pointer sur un item.
> Le concept de tableau permet de pointer sur une table de machins.
> 
> En C, on peut assez souvent intervertir les deux concepts, toutefois, il 
> n'est écrit nul part que cela pourrait être une bonne idée (d'intervertir).
> 
> En particulier, en C, il ne faut pas confondre:
> + un pointeur sur un pointeur (c'est ce que veux rigoureusement dire **)
> + un tableau de tableau (les arguments du main en C)
> + un tableau de pointeurs
> + un pointeur de tableaux
> 
> Un typage fort devrait permettre d'éviter ce genre de gag, l'utilisation 
> appropriée de typedef est recommandée.
> Mais lorsque l'on réutilise des bibliothèques codées par d'autres, ce 
> n'est hélas pas toujours possible...
> 
C'est un vieux débat. En fait tous ceux qui ont lu les versions
originales de "The C Programming Language"  de Kernighan et Ritchie ou
les "software tools" de Kernighan (je sais, la plupart d'entre vous
n'étiez pas encore nés...) se souviennent que la "philosophie" des
fondateurs d'Unix et de C prônait exactement l'inverse de ce que tu dis.
Pour eux, les programmeurs "savent ce qu'ils font" et il y a nombre de
fonctions des "Software tools" qui acceptent en paramètre le truc le
plus basic qui soit : un pointeur sur un tableau d'octets .Rappelez vous
que le langage C a été primitivement conçu comme langage portable pour
remplacer des dizaines de milliers de lignes de code d'un système
d'exploitation écrit en assembleur et que par nombre d'aspect c'est un
langage de très bas niveau. Ce n'est que bien plus tard et en
particulier lorsque C est devenu le langage privilégié de développement
sur micro-ordinateur que des efforts ont été entrepris pour le rendre
plus conforme aux standards enseignés par les "Computer
scientists" ( d'accord ça commençait à diverger mais la guerre Borland
Microsoft n'y était pas pour rien...). Alors est venu l'"ansi C". A
noter qu'il existe toujours sur tous les compilateurs des paramètres
permettant de traiter du C "K&R"...
L'un des arguments présentés à l'époque étaient que pour la plupart des
programmes, on passe plus de temps à les écrire qu'à les utiliser et que
dans les cas où la sécurité des biens et des personnes sont en jeu mieux
vaut utiliser l'un des nombreux langages "paranoïaques" qui existent
pour ce faire.
jpn


--------------------------------------------------------------------
Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>