Je voulais dire que le temps passé à réfléchir n'est pas du temps perdu,
cela fait au contraire souvent gagner du temps par la suite.
Mais se jetter sur le code n'est pas ce qu'il y a de pire, une fonction
peut être récupérable comme brique d'un projet et si elle ne l'est pas
tant pis, elle libérera de la place sur le disque. Cela permet de
s'occuper les doigts pendant qu'on réfléchit en background.
Pas forcément. La réponse est plutôt non.
Rhâzut ! j'ai fait une mauvaise hypothèse !
Dans ce cas, il est *peut-être* préférable de tester dynamiquement les
différentes caractéristiques des véhicules.
Par exemple en les mettant sur une espèce de database externe aux
programmes.
nous concernant, l'exemple suivant pourrait être une solution :
Le programme serait appelé comme cà :
$ monprog --vehicle ferrari.xml
Le programme remplit ensuite une structure dans laquelle peuvent
apparaître tous les parametres possibles et un certain nombre de
variable booléennes indiquant quelles fonctionnalités le véhicule
implémente etc. Cela peut faire une grosse structure mais même si elle
Pourquoi un fichier en xml ?
1 - parce que c'est un standard et que l'on trouve des logiciels qui le
traitent un peu partout, Il serait étonnant qu'il n'y ait pas en C un
parser de xml, cela évite de faire le design d'un langage et d'écrire
un parser. Mais si on veut se faire plaisir (??) on peut aussi utiliser
bison et flex.
Ce n'est qu'un exemple, l'important me semble être de donner à 1
programme les données qu'il a besoin et non de génèrer un programme
pour une utilisation particulière. Le programme n'a pas à connaître des
L'important est de séparer les problèmes, ceux qui tiennent à l'algo et
ceux qui tiennent à son utilisation, et séparer les langages, celui du
préprocesseur et le C proprement dit.
Cela entre dans une stratégie de découplage. Les problèmes doivent être
traité au niveau où ils doivent l'être.
Le problème reste le même si on utilise quelque chose de plus dynamique
comme dans l'ébauche de solution présentée plus haut. il me semble
incongru d'importuner Bellman avec des histoires de carburateur et d'en
truffer son algo.
Je ne sais pas pourquoi tu as besoin des données dans ton algo, mettons
que ce soit pour valuer les arcs (si ce n'est pas ça, l'exemple peut
peut-être quand même s'appliquer), il appelle une fonction
value_arc(theStruct) qui lui renvoit la bonne valeur.
Si un programme n'est pas structuré en couches fonctionnelles, il
devient de plus en plus ingérable à mesure qu'on lui rajoute des
fonctionnalités.
Cela peut être entré de la ligne de commande par l'option '-D'
Oui, je suis bien sous GNU/Linux ;-) Merci pour l'info concernant gcc.
Jusqu'à maintenant je faisais un sed -i "s///" sur le fichier
parameters.h.
Ca marche, mais cela a le désavantage de modifier le .h, notamment son
time-stamp.
J'ai recensé (j'aurais peut-être dû le faire dès le début) les
endroits où les constantes préprocesseur interviennent:
Ce n'est peut-être pas la bonne manière de départ de poser la question,
ce serait plutôt "à quel moment les caractéristiques spécifiques aux
véhicule interviennent ?".
La manière dont tu formules la question sous-entend un choix
d'implémentation?
1///////// Prototypes de fonction. Effectivement ce n'est pas très
lisible ;-)
(snip une 20aine de lignes comme ça)
Lorsque le nombre de paramêtres augmentent, il peut être bon de passer
une structure contenant ces paramêtres.
2////////// Dans le corps des fonctions.
Là cela peut se faire par des macros, ou une fonction ( éventuellement
inline ) get_it2max( ), que ABOUT_EQUAL_2( x ) soit une macro du
préproc ou une fonction qui teste une variable (ou les deux).
A ce sujet, je pense qu'il n'est pas recommandable de mettre des
Majuscules à ABOUT_EQUAL_2 du fait que le fait que ce soit une macro ou
une fonction est un choix d'implémentation qui n'interfère pas avec la
fonction qui l'utilise, fonctionnellement il s'agit d'une fonction.
On peut se demander s'il ne vaut pas mieux découper le code autrement.
Soit le programme exécutable est statique dans le sens où il ne peut
traiter qu'un type de véhicle auquel cas il faut indiquer le véhicule à
la compile, soit il peut traiter plusieurs types de véhicules auquel
cas il faut donner ce type à l'exécution..
C'est très chiant, mais obtenir les arguments de la ligne de commande
n'est pas d'une complexité insurmontable, voir le manuel de getopt,
getoptlong.
Je voulais dire que le temps passé à réfléchir n'est pas du temps perdu,
cela fait au contraire souvent gagner du temps par la suite.
Mais se jetter sur le code n'est pas ce qu'il y a de pire, une fonction
peut être récupérable comme brique d'un projet et si elle ne l'est pas
tant pis, elle libérera de la place sur le disque. Cela permet de
s'occuper les doigts pendant qu'on réfléchit en background.
Pas forcément. La réponse est plutôt non.
Rhâzut ! j'ai fait une mauvaise hypothèse !
Dans ce cas, il est *peut-être* préférable de tester dynamiquement les
différentes caractéristiques des véhicules.
Par exemple en les mettant sur une espèce de database externe aux
programmes.
nous concernant, l'exemple suivant pourrait être une solution :
Le programme serait appelé comme cà :
$ monprog --vehicle ferrari.xml
Le programme remplit ensuite une structure dans laquelle peuvent
apparaître tous les parametres possibles et un certain nombre de
variable booléennes indiquant quelles fonctionnalités le véhicule
implémente etc. Cela peut faire une grosse structure mais même si elle
Pourquoi un fichier en xml ?
1 - parce que c'est un standard et que l'on trouve des logiciels qui le
traitent un peu partout, Il serait étonnant qu'il n'y ait pas en C un
parser de xml, cela évite de faire le design d'un langage et d'écrire
un parser. Mais si on veut se faire plaisir (??) on peut aussi utiliser
bison et flex.
Ce n'est qu'un exemple, l'important me semble être de donner à 1
programme les données qu'il a besoin et non de génèrer un programme
pour une utilisation particulière. Le programme n'a pas à connaître des
L'important est de séparer les problèmes, ceux qui tiennent à l'algo et
ceux qui tiennent à son utilisation, et séparer les langages, celui du
préprocesseur et le C proprement dit.
Cela entre dans une stratégie de découplage. Les problèmes doivent être
traité au niveau où ils doivent l'être.
Le problème reste le même si on utilise quelque chose de plus dynamique
comme dans l'ébauche de solution présentée plus haut. il me semble
incongru d'importuner Bellman avec des histoires de carburateur et d'en
truffer son algo.
Je ne sais pas pourquoi tu as besoin des données dans ton algo, mettons
que ce soit pour valuer les arcs (si ce n'est pas ça, l'exemple peut
peut-être quand même s'appliquer), il appelle une fonction
value_arc(theStruct) qui lui renvoit la bonne valeur.
Si un programme n'est pas structuré en couches fonctionnelles, il
devient de plus en plus ingérable à mesure qu'on lui rajoute des
fonctionnalités.
Cela peut être entré de la ligne de commande par l'option '-D'
Oui, je suis bien sous GNU/Linux ;-) Merci pour l'info concernant gcc.
Jusqu'à maintenant je faisais un sed -i "s///" sur le fichier
parameters.h.
Ca marche, mais cela a le désavantage de modifier le .h, notamment son
time-stamp.
J'ai recensé (j'aurais peut-être dû le faire dès le début) les
endroits où les constantes préprocesseur interviennent:
Ce n'est peut-être pas la bonne manière de départ de poser la question,
ce serait plutôt "à quel moment les caractéristiques spécifiques aux
véhicule interviennent ?".
La manière dont tu formules la question sous-entend un choix
d'implémentation?
1///////// Prototypes de fonction. Effectivement ce n'est pas très
lisible ;-)
(snip une 20aine de lignes comme ça)
Lorsque le nombre de paramêtres augmentent, il peut être bon de passer
une structure contenant ces paramêtres.
2////////// Dans le corps des fonctions.
Là cela peut se faire par des macros, ou une fonction ( éventuellement
inline ) get_it2max( ), que ABOUT_EQUAL_2( x ) soit une macro du
préproc ou une fonction qui teste une variable (ou les deux).
A ce sujet, je pense qu'il n'est pas recommandable de mettre des
Majuscules à ABOUT_EQUAL_2 du fait que le fait que ce soit une macro ou
une fonction est un choix d'implémentation qui n'interfère pas avec la
fonction qui l'utilise, fonctionnellement il s'agit d'une fonction.
On peut se demander s'il ne vaut pas mieux découper le code autrement.
Soit le programme exécutable est statique dans le sens où il ne peut
traiter qu'un type de véhicle auquel cas il faut indiquer le véhicule à
la compile, soit il peut traiter plusieurs types de véhicules auquel
cas il faut donner ce type à l'exécution..
C'est très chiant, mais obtenir les arguments de la ligne de commande
n'est pas d'une complexité insurmontable, voir le manuel de getopt,
getoptlong.
Je voulais dire que le temps passé à réfléchir n'est pas du temps perdu,
cela fait au contraire souvent gagner du temps par la suite.
Mais se jetter sur le code n'est pas ce qu'il y a de pire, une fonction
peut être récupérable comme brique d'un projet et si elle ne l'est pas
tant pis, elle libérera de la place sur le disque. Cela permet de
s'occuper les doigts pendant qu'on réfléchit en background.
Pas forcément. La réponse est plutôt non.
Rhâzut ! j'ai fait une mauvaise hypothèse !
Dans ce cas, il est *peut-être* préférable de tester dynamiquement les
différentes caractéristiques des véhicules.
Par exemple en les mettant sur une espèce de database externe aux
programmes.
nous concernant, l'exemple suivant pourrait être une solution :
Le programme serait appelé comme cà :
$ monprog --vehicle ferrari.xml
Le programme remplit ensuite une structure dans laquelle peuvent
apparaître tous les parametres possibles et un certain nombre de
variable booléennes indiquant quelles fonctionnalités le véhicule
implémente etc. Cela peut faire une grosse structure mais même si elle
Pourquoi un fichier en xml ?
1 - parce que c'est un standard et que l'on trouve des logiciels qui le
traitent un peu partout, Il serait étonnant qu'il n'y ait pas en C un
parser de xml, cela évite de faire le design d'un langage et d'écrire
un parser. Mais si on veut se faire plaisir (??) on peut aussi utiliser
bison et flex.
Ce n'est qu'un exemple, l'important me semble être de donner à 1
programme les données qu'il a besoin et non de génèrer un programme
pour une utilisation particulière. Le programme n'a pas à connaître des
L'important est de séparer les problèmes, ceux qui tiennent à l'algo et
ceux qui tiennent à son utilisation, et séparer les langages, celui du
préprocesseur et le C proprement dit.
Cela entre dans une stratégie de découplage. Les problèmes doivent être
traité au niveau où ils doivent l'être.
Le problème reste le même si on utilise quelque chose de plus dynamique
comme dans l'ébauche de solution présentée plus haut. il me semble
incongru d'importuner Bellman avec des histoires de carburateur et d'en
truffer son algo.
Je ne sais pas pourquoi tu as besoin des données dans ton algo, mettons
que ce soit pour valuer les arcs (si ce n'est pas ça, l'exemple peut
peut-être quand même s'appliquer), il appelle une fonction
value_arc(theStruct) qui lui renvoit la bonne valeur.
Si un programme n'est pas structuré en couches fonctionnelles, il
devient de plus en plus ingérable à mesure qu'on lui rajoute des
fonctionnalités.
Cela peut être entré de la ligne de commande par l'option '-D'
Oui, je suis bien sous GNU/Linux ;-) Merci pour l'info concernant gcc.
Jusqu'à maintenant je faisais un sed -i "s///" sur le fichier
parameters.h.
Ca marche, mais cela a le désavantage de modifier le .h, notamment son
time-stamp.
J'ai recensé (j'aurais peut-être dû le faire dès le début) les
endroits où les constantes préprocesseur interviennent:
Ce n'est peut-être pas la bonne manière de départ de poser la question,
ce serait plutôt "à quel moment les caractéristiques spécifiques aux
véhicule interviennent ?".
La manière dont tu formules la question sous-entend un choix
d'implémentation?
1///////// Prototypes de fonction. Effectivement ce n'est pas très
lisible ;-)
(snip une 20aine de lignes comme ça)
Lorsque le nombre de paramêtres augmentent, il peut être bon de passer
une structure contenant ces paramêtres.
2////////// Dans le corps des fonctions.
Là cela peut se faire par des macros, ou une fonction ( éventuellement
inline ) get_it2max( ), que ABOUT_EQUAL_2( x ) soit une macro du
préproc ou une fonction qui teste une variable (ou les deux).
A ce sujet, je pense qu'il n'est pas recommandable de mettre des
Majuscules à ABOUT_EQUAL_2 du fait que le fait que ce soit une macro ou
une fonction est un choix d'implémentation qui n'interfère pas avec la
fonction qui l'utilise, fonctionnellement il s'agit d'une fonction.
On peut se demander s'il ne vaut pas mieux découper le code autrement.
Soit le programme exécutable est statique dans le sens où il ne peut
traiter qu'un type de véhicle auquel cas il faut indiquer le véhicule à
la compile, soit il peut traiter plusieurs types de véhicules auquel
cas il faut donner ce type à l'exécution..
C'est très chiant, mais obtenir les arguments de la ligne de commande
n'est pas d'une complexité insurmontable, voir le manuel de getopt,
getoptlong.
Je suis d'accord avec toi. Et je pense que (surtout en informatique
scientifique?) le fait de commencer à coder fait surgir des points
délicats qui auraient pu très bien passer au travers d'une analyse
préalable, même très minutieuse. Qu'en penses-tu?
Aujourd'hui, je n'utilise pas le format xml, mais le format
matlab/octave/scilab .m:
scalaire=2;
vecteur=[4 5.6 8 9];
matrice=[5 6 7
4 5 9
2 3 4];
Ce qui est lisible par un humain (contrairement au xml, qui doit se
prête plus aux structures arborescentes, non?)
Si j'arrivais à bien restructurer mon programme en plus de fonctions
(cf post en réponse à Stéphane Legras-Decussy plus bas), je pense que
je pourrais effectivement tout mettre en booléen dans un fichier de
config (style matlab pourquoi pas, auquel cas ce serait un entier égal
à 0 ou 1, ou simplement un entier représentant le numéro de véhicule).
Pour l'instant dans les fichiers de configuration .m, je n'ai que les
caractéristiques des éléments de la chaîne de traction (batterie,
moteur thermique, électrique, transmission, etc.)
Pourquoi un fichier en xml ?
1 - parce que c'est un standard et que l'on trouve des logiciels qui
le traitent un peu partout, Il serait étonnant qu'il n'y ait pas en C
un
libxml2, non? (je ne connais que de nom).
Le problème de ce standard je pense, c'est qu'il ne se prête pas trop
à l'informatique scientifique, cf plus haut.
De plus, ces données ont besoin d'être visualisées graphiquement, d'où
l'utilisation quasi-obligatoire d'un matlab, scilab ou octave (qui
utilise Gnuplot). Le format .m paraît donc difficilement
contournable... Qu'en penses-tu?
(...) Comme tout le
monde ici utilise Matlab, j'ai choisi le format .mat de Matlab.
J'écris le filtre en C++. J'ai lu un bouquin sur le C++ en un WE y'a
deux mois (une intro mais cependant qui introduit tout un tas de
notions par rapport au C), ça fait longtemps que je voulais le faire,
c'est fait. Bien sûr, vu la complexité du C++, je suis encore bien
juste, mais avec le bouquin de Stroustrup en plus sous la main,
j'arrive à avancer, j'apprends beaucoup de choses.
Je ne sais pas ce
que tu penses de la STL, mais cela m'a l'air pas mal du tout (pour
l'instant j'ai utilisé vector, string, map). J'aurais pu essayer de
faire le filtre en Perl que je connais un peu, mais je voulais
utiliser le générateur de parser boost::spirit, car bison/flex me
paraissaient plus complexes:
http://spirit.sourceforge.net/
En fait, ce qui m'a attiré, c'est la qualité de la documentation sur
le site de spirit.
Au début c'était dur, mais maintenant j'en suis très satisfait.
Par contre, en vitesse d'exécution, je ne sais pas ce que ça donne par
rapport à Bison/Flex... Si tu as des échos à ce niveau-là.
Aujourd'hui, les problèmes algorithmiques sont assez bien découplés,
contrairement aux deux langages préprocesseur et C proprement dit.
Bellman est déjà séparé de ces histoires de carbu ;-)
Les problèmes
algorithmiques sont assez bien découplés. Maintenant il faudrait
couper chacune des grandes fonctions en tout un tas de petites
fonctions dont les prototypes seraient à définir, afin d'éviter les
cstes préprocesseur (à ce niveau le boulot est à faire, au moins un
mois à mon avis).
Quand j'ai besion d'évaluer les arcs, j'appelle une fonction et une
seule, mon graphe est complètement découplé du reste.
Oui, tu as raison, cela donne à chaque fois un petit conflit à régler
après l'update venant du serveur CVS. Merci pour l'astuce.
Oui, tu as raison. C'est un travail à faire, assez ardu. Faut s'y
mettre à 100% pendant un bon bout de temps (et c'est pas du travail
qui produit des résultats tangibles, donc va convaincre mon chef).
Je ne suis pas sûr de comprendre concernant la remarque sur
ABOUT_EQUAL_2.
On peut se demander s'il ne vaut pas mieux découper le code
autrement.
C'est ce que je pense, mais y'a du boulot ;-)
Pour ce programme, j'ai utilisé getoptlong.
Il se trouve que depuis j'ai codé un autre programme qui utilise popt
(la librairie qu'utilise l'utilitaire rpm pour traiter sa ligne de
commande si je ne m'abuse). popt me paraît être un ton au dessus.
Je suis d'accord avec toi. Et je pense que (surtout en informatique
scientifique?) le fait de commencer à coder fait surgir des points
délicats qui auraient pu très bien passer au travers d'une analyse
préalable, même très minutieuse. Qu'en penses-tu?
Aujourd'hui, je n'utilise pas le format xml, mais le format
matlab/octave/scilab .m:
scalaire=2;
vecteur=[4 5.6 8 9];
matrice=[5 6 7
4 5 9
2 3 4];
Ce qui est lisible par un humain (contrairement au xml, qui doit se
prête plus aux structures arborescentes, non?)
Si j'arrivais à bien restructurer mon programme en plus de fonctions
(cf post en réponse à Stéphane Legras-Decussy plus bas), je pense que
je pourrais effectivement tout mettre en booléen dans un fichier de
config (style matlab pourquoi pas, auquel cas ce serait un entier égal
à 0 ou 1, ou simplement un entier représentant le numéro de véhicule).
Pour l'instant dans les fichiers de configuration .m, je n'ai que les
caractéristiques des éléments de la chaîne de traction (batterie,
moteur thermique, électrique, transmission, etc.)
Pourquoi un fichier en xml ?
1 - parce que c'est un standard et que l'on trouve des logiciels qui
le traitent un peu partout, Il serait étonnant qu'il n'y ait pas en C
un
libxml2, non? (je ne connais que de nom).
Le problème de ce standard je pense, c'est qu'il ne se prête pas trop
à l'informatique scientifique, cf plus haut.
De plus, ces données ont besoin d'être visualisées graphiquement, d'où
l'utilisation quasi-obligatoire d'un matlab, scilab ou octave (qui
utilise Gnuplot). Le format .m paraît donc difficilement
contournable... Qu'en penses-tu?
(...) Comme tout le
monde ici utilise Matlab, j'ai choisi le format .mat de Matlab.
J'écris le filtre en C++. J'ai lu un bouquin sur le C++ en un WE y'a
deux mois (une intro mais cependant qui introduit tout un tas de
notions par rapport au C), ça fait longtemps que je voulais le faire,
c'est fait. Bien sûr, vu la complexité du C++, je suis encore bien
juste, mais avec le bouquin de Stroustrup en plus sous la main,
j'arrive à avancer, j'apprends beaucoup de choses.
Je ne sais pas ce
que tu penses de la STL, mais cela m'a l'air pas mal du tout (pour
l'instant j'ai utilisé vector, string, map). J'aurais pu essayer de
faire le filtre en Perl que je connais un peu, mais je voulais
utiliser le générateur de parser boost::spirit, car bison/flex me
paraissaient plus complexes:
http://spirit.sourceforge.net/
En fait, ce qui m'a attiré, c'est la qualité de la documentation sur
le site de spirit.
Au début c'était dur, mais maintenant j'en suis très satisfait.
Par contre, en vitesse d'exécution, je ne sais pas ce que ça donne par
rapport à Bison/Flex... Si tu as des échos à ce niveau-là.
Aujourd'hui, les problèmes algorithmiques sont assez bien découplés,
contrairement aux deux langages préprocesseur et C proprement dit.
Bellman est déjà séparé de ces histoires de carbu ;-)
Les problèmes
algorithmiques sont assez bien découplés. Maintenant il faudrait
couper chacune des grandes fonctions en tout un tas de petites
fonctions dont les prototypes seraient à définir, afin d'éviter les
cstes préprocesseur (à ce niveau le boulot est à faire, au moins un
mois à mon avis).
Quand j'ai besion d'évaluer les arcs, j'appelle une fonction et une
seule, mon graphe est complètement découplé du reste.
Oui, tu as raison, cela donne à chaque fois un petit conflit à régler
après l'update venant du serveur CVS. Merci pour l'astuce.
Oui, tu as raison. C'est un travail à faire, assez ardu. Faut s'y
mettre à 100% pendant un bon bout de temps (et c'est pas du travail
qui produit des résultats tangibles, donc va convaincre mon chef).
Je ne suis pas sûr de comprendre concernant la remarque sur
ABOUT_EQUAL_2.
On peut se demander s'il ne vaut pas mieux découper le code
autrement.
C'est ce que je pense, mais y'a du boulot ;-)
Pour ce programme, j'ai utilisé getoptlong.
Il se trouve que depuis j'ai codé un autre programme qui utilise popt
(la librairie qu'utilise l'utilitaire rpm pour traiter sa ligne de
commande si je ne m'abuse). popt me paraît être un ton au dessus.
Je suis d'accord avec toi. Et je pense que (surtout en informatique
scientifique?) le fait de commencer à coder fait surgir des points
délicats qui auraient pu très bien passer au travers d'une analyse
préalable, même très minutieuse. Qu'en penses-tu?
Aujourd'hui, je n'utilise pas le format xml, mais le format
matlab/octave/scilab .m:
scalaire=2;
vecteur=[4 5.6 8 9];
matrice=[5 6 7
4 5 9
2 3 4];
Ce qui est lisible par un humain (contrairement au xml, qui doit se
prête plus aux structures arborescentes, non?)
Si j'arrivais à bien restructurer mon programme en plus de fonctions
(cf post en réponse à Stéphane Legras-Decussy plus bas), je pense que
je pourrais effectivement tout mettre en booléen dans un fichier de
config (style matlab pourquoi pas, auquel cas ce serait un entier égal
à 0 ou 1, ou simplement un entier représentant le numéro de véhicule).
Pour l'instant dans les fichiers de configuration .m, je n'ai que les
caractéristiques des éléments de la chaîne de traction (batterie,
moteur thermique, électrique, transmission, etc.)
Pourquoi un fichier en xml ?
1 - parce que c'est un standard et que l'on trouve des logiciels qui
le traitent un peu partout, Il serait étonnant qu'il n'y ait pas en C
un
libxml2, non? (je ne connais que de nom).
Le problème de ce standard je pense, c'est qu'il ne se prête pas trop
à l'informatique scientifique, cf plus haut.
De plus, ces données ont besoin d'être visualisées graphiquement, d'où
l'utilisation quasi-obligatoire d'un matlab, scilab ou octave (qui
utilise Gnuplot). Le format .m paraît donc difficilement
contournable... Qu'en penses-tu?
(...) Comme tout le
monde ici utilise Matlab, j'ai choisi le format .mat de Matlab.
J'écris le filtre en C++. J'ai lu un bouquin sur le C++ en un WE y'a
deux mois (une intro mais cependant qui introduit tout un tas de
notions par rapport au C), ça fait longtemps que je voulais le faire,
c'est fait. Bien sûr, vu la complexité du C++, je suis encore bien
juste, mais avec le bouquin de Stroustrup en plus sous la main,
j'arrive à avancer, j'apprends beaucoup de choses.
Je ne sais pas ce
que tu penses de la STL, mais cela m'a l'air pas mal du tout (pour
l'instant j'ai utilisé vector, string, map). J'aurais pu essayer de
faire le filtre en Perl que je connais un peu, mais je voulais
utiliser le générateur de parser boost::spirit, car bison/flex me
paraissaient plus complexes:
http://spirit.sourceforge.net/
En fait, ce qui m'a attiré, c'est la qualité de la documentation sur
le site de spirit.
Au début c'était dur, mais maintenant j'en suis très satisfait.
Par contre, en vitesse d'exécution, je ne sais pas ce que ça donne par
rapport à Bison/Flex... Si tu as des échos à ce niveau-là.
Aujourd'hui, les problèmes algorithmiques sont assez bien découplés,
contrairement aux deux langages préprocesseur et C proprement dit.
Bellman est déjà séparé de ces histoires de carbu ;-)
Les problèmes
algorithmiques sont assez bien découplés. Maintenant il faudrait
couper chacune des grandes fonctions en tout un tas de petites
fonctions dont les prototypes seraient à définir, afin d'éviter les
cstes préprocesseur (à ce niveau le boulot est à faire, au moins un
mois à mon avis).
Quand j'ai besion d'évaluer les arcs, j'appelle une fonction et une
seule, mon graphe est complètement découplé du reste.
Oui, tu as raison, cela donne à chaque fois un petit conflit à régler
après l'update venant du serveur CVS. Merci pour l'astuce.
Oui, tu as raison. C'est un travail à faire, assez ardu. Faut s'y
mettre à 100% pendant un bon bout de temps (et c'est pas du travail
qui produit des résultats tangibles, donc va convaincre mon chef).
Je ne suis pas sûr de comprendre concernant la remarque sur
ABOUT_EQUAL_2.
On peut se demander s'il ne vaut pas mieux découper le code
autrement.
C'est ce que je pense, mais y'a du boulot ;-)
Pour ce programme, j'ai utilisé getoptlong.
Il se trouve que depuis j'ai codé un autre programme qui utilise popt
(la librairie qu'utilise l'utilitaire rpm pour traiter sa ligne de
commande si je ne m'abuse). popt me paraît être un ton au dessus.
// libère la mémoire et met l'argument à NULL
// (une fonction inline serait mieux.)
#define free_null( X ) { void **P = &X ;free( *P ) ; *P = NULL ; }
[snip]
// libère la mémoire et met l'argument à NULL
// (une fonction inline serait mieux.)
#define free_null( X ) { void **P = &X ;free( *P ) ; *P = NULL ; }
[snip]
// libère la mémoire et met l'argument à NULL
// (une fonction inline serait mieux.)
#define free_null( X ) { void **P = &X ;free( *P ) ; *P = NULL ; }
[snip]
Si je définis free_null ainsi:
#define free_null( X ) { free( X ) ; X = NULL ; }
Cela a l'air de marcher.
Si je définis free_null ainsi:
#define free_null( X ) { free( X ) ; X = NULL ; }
Cela a l'air de marcher.
Si je définis free_null ainsi:
#define free_null( X ) { free( X ) ; X = NULL ; }
Cela a l'air de marcher.
Le problème vient du fait que X est évalué 2 fois, si c'est une variable
ce n'est pas bien grave.
Maintenant appelle la macro avec :
free_null( x = get_next(x) )
ou un truc comme ça.
Le problème vient du fait que X est évalué 2 fois, si c'est une variable
ce n'est pas bien grave.
Maintenant appelle la macro avec :
free_null( x = get_next(x) )
ou un truc comme ça.
Le problème vient du fait que X est évalué 2 fois, si c'est une variable
ce n'est pas bien grave.
Maintenant appelle la macro avec :
free_null( x = get_next(x) )
ou un truc comme ça.