Exercices,langage C

Messages : 90

Enregistré le : 21 nov. 2014 13:37

Re: Exercices,langage C

Message par Yodsanklai » 09 déc. 2014 13:39

fakbill a écrit : Ou alors ce que tu appelles "un type" n'est pas la même chose que ce que j'appelle un type.
C'est effectivement la source de confusion. Un type n'est pas nécessairement une étiquette. Ça l'est en Java et C (ce que j'appelle typage nominal, basé sur des noms), ça ne l'est pas en OCaml ou Python (typage structurel). Encore une fois, en caml, on peut écrire fun x -> x#a qui acceptera en argument n'importe quel type possedant un attribut "a". Python est dynamique et structurel (= duck typing), Caml est statique et structurel etc...

Messages : 11355

Enregistré le : 30 juil. 2008 16:59

Classe : Dr.-Ing

Re: Exercices,langage C

Message par fakbill » 09 déc. 2014 14:20

ok :)
En tant que system eng, je plaide coupable : "toujours vérifier qu'on se comprend bien sur les TERMES du blabla avant de poursuivre le dit blabla".
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 61

Enregistré le : 24 mai 2014 19:50

Re: Exercices,langage C

Message par Professeur Rectangle » 19 déc. 2014 08:25

Taupelvl a écrit : Comme dit plus haut, c'est plus simple de vérifier soit-même si son programme marche ou pas du coup.
Pour avoir enseigné C, je trouve que dans ce langage il est difficile pour l'étudiant de vérifier lui-même son programme.
Il est très facile d'avoir fait une erreur "invisible", par exemple un débordement de tableau, de la lecture dans de la mémoire désallouée, etc. Dans d'autres langage, c'est impossible (une erreur arrête le programme en cas de débordement de tableau par exemple).
Sans compter qu'on peut "croire" que son code marche quand il ne va marcher que sur 1 compilateur.

Messages : 11355

Enregistré le : 30 juil. 2008 16:59

Classe : Dr.-Ing

Re: Exercices,langage C

Message par fakbill » 19 déc. 2014 13:58

Sans compter qu'on peut "croire" que son code marche quand il ne va marcher que sur 1 compilateur.
Non ca c'est si on compile sans le plus haut niveau de warnings ET qu'on ne véfirie pas (e.g. avec valgrind) que la mémoire est ok.
Un programme qui déborbe en mémoire ne **marche** sur AUCUN compilo. "Marche" au sens "fait le calcul de facon prédictible".
Pour avoir enseigné C, je trouve que dans ce langage il est difficile pour l'étudiant de vérifier lui-même son programme.
Le langage C est plus compliqué pour un débutant qu'un autre langage comme python car, en C, on gère la mémoire à la main.
Une fois qu'on a compris ca, on peut faire tourner ses PETITS codes à la main. Si suffit d'avoir en tête ce qui se passe en mémoire.
Taper en dehors d'un tableau est une errreur en C et en python (évidence...). Je ne vois pas pourquoi ce serait plus dur en C de voir à la main qu'on a un pb. Aue l'erreur puisse passer inappercue et/OU planter le code plus loin en C est une chose...mais quand on fait tourner le machin à la main sur un exemple de petites dimensions, ca ne fait aucune différence avec disons du python.

Le tout est de bien comprendre ce qu'est un pointeur.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 61

Enregistré le : 24 mai 2014 19:50

Re: Exercices,langage C

Message par Professeur Rectangle » 20 déc. 2014 14:27

fakbill a écrit :
Sans compter qu'on peut "croire" que son code marche quand il ne va marcher que sur 1 compilateur.
Non ca c'est si on compile sans le plus haut niveau de warnings ET qu'on ne véfirie pas (e.g. avec valgrind) que la mémoire est ok.
Un programme qui déborbe en mémoire ne **marche** sur AUCUN compilo. "Marche" au sens "fait le calcul de facon prédictible".
Il n'y a pas que les problèmes de mémoire qui rendent compilateur-dépendant. Et mettre le plus haut niveau de warning dépend de comment le compilateur respecte le standard.

Messages : 11355

Enregistré le : 30 juil. 2008 16:59

Classe : Dr.-Ing

Re: Exercices,langage C

Message par fakbill » 20 déc. 2014 16:14

Il n'y a pas que les problèmes de mémoire qui rendent compilateur-dépendant. Et mettre le plus haut niveau de warning dépend de comment le compilateur respecte le standard.
Non et non.
Sauf à aller taper dans des projets aussi bas niveau et complexe que le noyau linux, n'importe quel compilo C non ridicule fera l'affaire de la même façon. Tu as donné des cours à des experts en C ou quoi?? De plus, "les pbs de mémoire" ne sont pas compilo-dépendant. Qu'un code faux plante de façon différente d'un compilo à l'autre n'est pas une observation intéressante car, si on gère mal la mémoire, alors le comportement du programme est "undef". Une fois ça va marcher un fois ça va planter et c'est fonction d'un tas de choses très bas niveau.
Bref, le message "ça dépend du compilo" n'est pas le bon du tout. Le bon message c'est "si la mémoire est mal gérée, alors que ça marche ou pas sur un exemple n'a pas d’intérêt : un jour ça plantera". Les variantes dans le détail des options et des perfo d'un compilo à l'autre....laissons ça aux experts.

Certains compilo émettent des warnings plus "justes" et plus informatifs que d'autres mais ce n'est pas spécifié par le standard ISO à ce que je sache (d'ailleurs, certains warnings tentent de résoudre un problème indécidable en toute généralité (Wunused par exemple) donc je vois mal ce que le standard pourrait en dire ;)
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Répondre