Difficulté à comprendre un code - C - Programmation
Marsh Posté le 24-12-2012 à 13:34:05
Noter que ce code ne marche pas si les paramètres des fonctions figurent dans la déclaration.
Par exemple, si on a une fonction
int *myf(char *s) {... }
la déclaration puis l'assignation qui suivent sont correctes
int *((*test)(char *));
test = &myf;
mais le code ne sait pas analyser la déclaration int *((*test)(char *))
A+,
Marsh Posté le 25-12-2012 à 01:53:31
Oui, ça fait justement partie des exos proposés par le bouquin : compléter le code.
Mais je peux pas les faire tant que j'ai pas pigé bien le truc de A à Z !
Bon là c'est trêve de Nowel
Jovalise, un logigramme, okay je vais googler
Marsh Posté le 25-12-2012 à 02:22:46
Ben en fait faut juste que tu t’intéresse a dclabs qui est quasi recursive, au détail près que la récursion passe a travers dcl:
dclabs fait:
...
if(typelex == '(')
{
dcl();
if(typelex != ')')
printf("erreur : ) manquante\n" );
}
...
et
dcl fait un appel à dclabs:
...
dclabs();
...
C'est le seul truc un peu complexe du code.
On pourrait réécrire dclabs() sans avoir besoin de dcl, la récursion serait plus apparente:
Code :
|
A+,
Marsh Posté le 25-12-2012 à 17:50:40
Ah oui ça simplifie déjà les choses, merci. Après j'ai du mal à tracer le tandem lirecar() et remettrecar().
Quand j'aurai assimilé je posterai les solutions que je trouve aux exos du livre.
Marsh Posté le 25-12-2012 à 21:09:38
Lirecar c'est tout con, ça lit un caractère de stdin, sauf si tu as stocké des caractères a lire dans un buffer ad-hoc (ptamp) avec remettrecar auquel cas, ça lit dans ce buffer.
A+,
Marsh Posté le 25-12-2012 à 21:28:56
Je comprends ce que ça fait, mais naturellement j'aurais mis la saisie dans un tableau, en virant les espaces etc.. Mais ça je suppose que c'est la méthode "bête"
Marsh Posté le 25-12-2012 à 21:50:09
Ça serait plus simple, et au lieu de faire remettrecar, il suffirait de reculer le pointeur.
Ce programme est pas du tout un modèle de qualité. Le seul avantage a faire comme ils font c'est de pas être limité par la taille de l'entrée (ce que ferait un tableau dans lequel on copie), mais vu comment ils se limitent en sortie avec sortie[MAXLEX] euh...
A+,
Marsh Posté le 25-12-2012 à 23:05:26
C'est ce que je me disais aussi !
Bonne soirée,
Marsh Posté le 23-12-2012 à 18:40:19
Salut,
Dans le chapitre sur les déclarations complexes du K&R, on a cet exemple de programme qui génère la description verbale d'une déclaration :
(il n'est pas présenté exactement comme ça dans le bouquin, j'ai complété/ré-agencé pour essayer de mieux piger)
Exemple : int (*test()) () --> le programme affiche test : fonction retournant pointeur sur fonction retournant int
Bon, déjà, la grammaire de ce genre de déclarations, c'est pas facile à appréhender je trouve.
Et concernant le programme, j'arrive pas à analyser l'ensemble du truc. Trop de fonctions qui s'appellent les unes les autres, je ne saisis pas le déroulement.
J'ai essayé de trouver une méthode de schématisation visuelle, sans succès, il me faudrait un grand tableau veleda peut-être, pour arriver à une représentation claire
Essayé de mettre du commentaire partout aussi, mais c'est encore plus fouillis au final.
Rien que la méthode avec lirecar() et remettrecar(c), je trouve pas ça naturel, d'emblée ça me met le cerveau en vrac
Donc deux requêtes :
- existe-t-il un moyen efficace de "visualiser" clairement le fonctionnement d'un code non (ou mal) commenté ? Une méthode standard de représentation graphique, avec des boîtes et des flèches je sais pas..
- et bien sûr, si quelqu'un se sent de m'aider à comprendre le code (plusieurs jours que je me prends la tête dessus )
Message édité par simius_computus le 23-12-2012 à 18:41:32
---------------
IWH --- Le forum de toute une génération : http://losersiv.1fr1.net (losers, sans-ami, dépressifs, allez on va faire cette merde)