[gull] Php/MsSQL obsoletes?

Leopoldo Ghielmetti Leopoldo.Ghielmetti at a3.epfl.ch
Wed Sep 28 16:08:46 CEST 2005


On Wed, 2005-09-28 at 15:38, Marc Mongenet wrote:
> 2005/9/28, Leopoldo Ghielmetti <Leopoldo.Ghielmetti at a3.epfl.ch>:
> > Mais tu peut très bien écrire une chose comme celle la (en ANSI C):
> >
> > module.c:
> > void fonction(int a)
> > {
> >   printf("%d\n", a);
> > }
> >
> > module.h:
> > void fonction();
> >
> > main.c:
> > include "module.h"
> >
> > int main()
> > {
> >   float b = 1.0;
> >   fonction(b);
> >   return 0;
> > }
> >
> > Et ça passe très bien.
> 
> On peut détecter cette erreur avec GCC avec l'option
> -Wmissing-prototypes (que module.c inclue ou pas module.h).
> Lorsque module.h est inclu, le prototype manque toujours car
> en fait module.h ne contient qu'une déclaration de fonction,
> mais pas son prototype, ce qui est légèrement différent.

Oui, mais quand tu as des choses comme celles-ci:
module.h:
int fonction(int a);

module.c:
include "module.h"

int fonction(int a)
{
}

main.c:

int fonction(float);

int main()
{
  float b = 1.0;
  fonction(b);
}

Il est vraiment difficile de le détecter en C. Pour ça il faut passer
par le compilateur C++ (chose que si je peux je fais).

Et ne me dites pas que ces choses la n'arrivent pas, j'ai trouvé du code
qui contenait bien pire que ça.

L'autre fois je parlais du Modula2, là on était forcés d'avoir un
fichier .MOD et un fichier .DEF, ensuite le module principal devait
include le .DEF.
Le compilateur vérifiait à la compilation la cohérence entre le .MOD et
le .DEF et il était impossible de déclarer autre chose. Donc impossible
de se tromper.

Beaucoup mieux qu'avec le Pascal ou ils ont introduit ce système bête de
partie de déclaration et partie d'implementation (que je n'ai d'ailleurs
jamais utilisée car le Pascal je l'ai abandonné pour le Modula2 bien
avant qu'il soient d'usage commun et standardisés) qui se trouvaient
dans le même fichier. En Modula2 on pouvait très bien compiler un module
et fournir un .OBJ avec son .DEF (bien sûr les deux devaient être
cohérents) et donc créer des modules opaques (contraires à la
philosophie GNU, mais à l'époque on ne se souciait pas trop de ça).

Je n'ai jamais commis d'erreurs de typage en Modula2, il fallait
toujours caster pour changer de type (ou il y avait une option pour
forcer la vérification, je ne me rappelle plus exactement ça fait
beaucoup d'années que je ne l'utilises plus). Par contre je faisait
d'autres erreurs.

> Marc Mongenet

ciao, Leo

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://forum.linux-gull.ch/pipermail/gull/attachments/20050928/b49afa49/attachment.pgp>


More information about the gull mailing list