Langage C : cours + exercices corrigés + TPs + exams54.47

Langage C : cours + exercices corrigés + TPs + exams

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

Langage C : cours + exercices corrigés + TPs + exams

Message par lamia le Mer 9 Jan - 11:15

C'est un cours complet avec des exercices corrigés, des TPs corrigés, et des exams:


Langage C


Enjoy it Smile

lamia
Modérateur
Modérateur

Féminin
Nombre de messages : 1936
Age : 29
Localisation : Tunis
Réputation : 53
Points : 3675
Date d'inscription : 04/11/2007

Feuille de personnage
Capacité linguistique:
996/1000  (996/1000)

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par manianis le Mer 9 Jan - 13:11

Thanks Lamia

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3129
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Invité le Mar 29 Jan - 21:42

100000 merci !!

Invité
Invité


Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par methodiX le Mer 30 Jan - 2:19

Merci Lamia. Très active Wink

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum

methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4128
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par lamia le Mer 30 Jan - 2:38

Bon faut tenir compte de quelques remarques ennocés par Timon dans ce sujet concernant ce site.

_________________
¤´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´ (¸.·`¤... Lamia

lamia
Modérateur
Modérateur

Féminin
Nombre de messages : 1936
Age : 29
Localisation : Tunis
Réputation : 53
Points : 3675
Date d'inscription : 04/11/2007

Feuille de personnage
Capacité linguistique:
996/1000  (996/1000)

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par lamia le Mer 30 Jan - 2:40

Timon a écrit:...
Comme vous le savez, Internet et les librairies regorgent de livres abordant l'apprentissage du langage C. Malheureusement, bon nombre de ces cours/tutoriels sont de mauvaise qualité.
Exemple de mauvais tutoriel :
Langage C de Patrick Trau
Exemple de mauvais livre :
La bible du programmeur de Kris Jamsa et Lars Klander

Par "mauvaise qualité", j'entends méconnaissance du langage (de sa norme) et enseignement à partir de ces mauvaises bases. J'ai souvent l'impression que leur(s) auteur(s) l'ont appris par empirisme. Bien sûr qu'il faut manipuler le langage pour le comprendre mais il ne faut pas s'arrêter à ça si on veut l'utiliser concrètement et surtout si on veut l'enseigner !
Ainsi, on y voit des absurdités qui pourraient être facilement corrigées si l'auteur avait été un peu sérieux :
Patrick Trau a écrit:Fonctions d'entrées/sorties les plus utilisées
[...]
char putchar(char)
Alors que
La norme (C89) a écrit:4.9.7.9 The putchar function

Synopsis

Code:
 #include
int putchar(int c);
L'erreur peut sembler minime. Pourtant, c'est une fonction que tout programmeur connaît. Comment peut-on se permettre une telle erreur qui amènera le débutant forcément dans un mur ?
Ce n'est pas la seule erreur, sinon elle serait plus ou moins pardonnable (faute de frappe, copié-collé, distraction ?).
...

_________________
¤´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´ (¸.·`¤... Lamia

lamia
Modérateur
Modérateur

Féminin
Nombre de messages : 1936
Age : 29
Localisation : Tunis
Réputation : 53
Points : 3675
Date d'inscription : 04/11/2007

Feuille de personnage
Capacité linguistique:
996/1000  (996/1000)

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Timon le Mer 30 Jan - 16:04

Je vais profiter du fait que ce sujet soit remonté pour développer ma critique ce "cours". Je vais prendre pour cible ses exercices corrigés et ne lister que ce qui me paraît le plus grave :

Non portabilité du code :
- Inclusion du fichier d'en-tête non standard alloc.h pour pouvoir utiliser malloc(). stdlib.h ne lui suffit pas ?
- Utilisation de la bibliothèque CONIO. Y a-t-il vraiment un intérêt à enseigner les bases du C avec ça ?

Transtypage du retour de malloc() :
Partrick Trau a écrit:
Code:
premier=(struct page *)malloc(sizeof(struct page));
Le transtypage ((struct page *)) n'est absolument pas utile et peut être dangereux puisqu'il bâillonnerait le compilateur en cas de non inclusion du fichier stdlib.h.
Enfin, je rappelle que le vrai prototype de malloc() est :
Code:
void *malloc(size_t n_bytes);
Or, void * se transtype implicitement en n'importe quel pointeur !
Bref, il pourrait s'épargner cette peine
en écrivant simplement :
Code:
premier = malloc(sizeof(struct page));
ou mieux :
Code:
premier = malloc(sizeof *premier);

Non vérification du retour de malloc() :
Code:
premier=(struct page *)malloc(sizeof(struct page));
puts("entrez votre premier entier");
scanf("%d",&premier->val);

La mémoire est limitée et utilisée par d'autres programmes. L'allocation de mémoire peut donc échouer. Dans ce cas, la fonction renvoie NULL.

Utilisation de la fonction gets() :
Cette fonction est très bien... pour les pirates car elle leur ouvre les portes en grand. Il est vrai que sur la plupart des systèmes, il est maintenant plus difficile d'utiliser cette faille mais elle existe quand même.
Et même si on ne considère pas ce problème, il suffit seulement de se rappeler qu'elle ne fait aucun contrôle sur la longueur de la saisie. N'importe quel utilisateur peut faire planter le programme.
Il faut donc lui préférer fgets() qui permet de limiter la longueur de la saisie. Aucun risque de buffer overflow sauf si, bien sûr, vous utilisez mal la fonction.
Smile
Le plus étrange est que l'auteur cite cette fonction mais s'obstine pourtant à utiliser gets().

Enfin, utilisation de variables globales dans chacun de ses codes :
Il est important d'utiliser le moins possible les variables globales. En effet, plus le code évolue et plus il est difficile de connaître la valeur des variables globales.
On se retrouve alors avec des fonctions trop dépendantes les unes des autres et un code non (ou difficilement) réutilisable.

Il y a malheureusement d'autres choses qui ne sont pas correctes mais cela me semble suffisant pour vous dissuader de construire vos bases avec ce cours.


Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3036
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par methodiX le Mer 30 Jan - 21:54

Bravo pour les remarques pertinentes. Pourtant on nous a toujours conseillé de suivre ce cours. C'est vrai, pour débuter en C, il n'est pas très dangereux de suivre ce cours, puisqu'on ne s'aperçoit pas de ces fautes. Mais ça reste un très bon test pour les connaisseurs du langages C.

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum

methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4128
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par methodiX le Mer 30 Jan - 21:58

Code:
premier = malloc(sizeof *premier);

Je ne suis pas sûr que c'est la meilleure façon pour allouer de l'espace à un pointeur de type (struct page*) !!! Même si le transtypage est implicite, il est préférable à mon avis de le mettre en évidence, même pour avoir un code plus lisible, surtout si on se contente de mettre sizeof *premier au lieu de sizeof(struct page) ...

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum

methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4128
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Timon le Mer 30 Jan - 22:36

methodiX a écrit:Je ne suis pas sûr que c'est la meilleure façon pour allouer de l'espace à un pointeur de type (struct page*) !!! Même si le transtypage est implicite, il est préférable à mon avis de le mettre en évidence, même pour avoir un code plus lisible, surtout si on se contente de mettre sizeof *premier au lieu de sizeof(struct page) ...
C'est une méthode largement utilisée et qui est la plus maintenable.
Le problème du transtypage explicite du retour de malloc() est qu'il peut cacher des erreurs qui sont alors potentiellement dramatiques.
Si stdlib.h n'est pas inclus, malloc() n'est pas déclarée. Cependant, le compilateur peut émettre la supposition que la fonction est définie comme suit :
Code:
int malloc(int n_bytes);
Ce qui est totalement faux dans notre cas. Normalement, le compilateur émet un avertissement pour indiquer que la fonction n'est pas explicitement déclarée et que son hypothèse est probablement fausse.
Cependant, le transtypage indique au compilateur : "Ne dis rien, je sais ce que je fais."
On n'est alors pas averti du problème et le programme rencontre un jour ou un autre un bug qui sera difficile à corriger.
Pour le reste, le transtypage ne doit pas avoir valeur de documentation, seulement de reconversion lorsqu'elle ne peut se faire naturellement. Ce document (en anglais) le démontre.

Revenons à sizeof *premier. premier est de type struct page *. Donc, lorsque ce pointeur pointe sur une adresse valide, *premier est l'élément qu'il pointe. Cet objet est de type struct page.
Le problème, pourrait-on objecter, est que premier ne pointe sur rien de valide avant l'appel de malloc(). Heureusement, la norme dit que l'expression sur laquelle on applique sizeof n'est pas évaluée. On détermine seulement le type de l'expression, d'où :
sizeof(struct page) = sizeof *premier = sizeof *premier++ = sizeof (*premier)++ = sizeof *(struct page *)NULL = ...

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3036
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Napoléon le Jeu 31 Jan - 12:05

Vraiment bravo pour la qualité de la discussion. Très intéressante pour ceux qui ont un niveau confirmé en C.

_________________
Nabil - tunis
خير الناس أنفعهم للناس

Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 4746
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par suneddine le Jeu 31 Jan - 14:02

nabiL a écrit:Vraiment bravo pour la qualité de la discussion. Très intéressante pour ceux qui ont un niveau confirmé en C.
malheureusement, ce n'est pas le cas pour moi.

suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 30
Localisation : tunisie
Réputation : 5
Points : 3196
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par manianis le Ven 1 Fév - 1:02

mosa a écrit:
nabiL a écrit:Vraiment bravo pour la qualité de la discussion. Très intéressante pour ceux qui ont un niveau confirmé en C.
malheureusement, ce n'est pas le cas pour moi.

Le problème d'allocation/libération de la mémoire est un sujet trés important. Il n'est pas traité avec précision pour les non informaticiens vu les maux de tête qu'il puisse générer.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3129
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Timon le Ven 1 Fév - 1:20

manianis a écrit:Le problème d'allocation/libération de la mémoire est un sujet trés important. Il n'est pas traité avec précision pour les non informaticiens vu les maux de tête qu'il puisse générer.
Pourtant, la règle est simple : pour chaque allocation sa libération. Razz
Plus sérieusement, lors de l'écriture du Kit du Débutant, je me suis dit qu'il serait intéressant qu'il y ait justement une aide à ce sujet. C'est pourquoi, les fonctions d'allocation/libération sont "enroulées" dans de nouvelles fonctions qui vérifient, dans la mesure du possible, que le programmeur n'a rien fait de bizarre et rien oublié.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3036
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par manianis le Ven 1 Fév - 2:18

Timon a écrit:Pourtant, la règle est simple : pour chaque allocation sa libération. Razz
Plus sérieusement, lors de l'écriture du Kit du Débutant, je me suis dit qu'il serait intéressant qu'il y ait justement une aide à ce sujet. C'est pourquoi, les fonctions d'allocation/libération sont "enroulées" dans de nouvelles fonctions qui vérifient, dans la mesure du possible, que le programmeur n'a rien fait de bizarre et rien oublié.

Oui, justement, c'est trés simple à dire mais les exceptions sont multiples. Les bugs font que parfois des fonctions standard ne réagissent pas de la manière attendue et qu'il génèrent des problèmes de mémoire. J'ai eu par exemple ce type de problèmes avec quelques fonctions standard sous Visual C++, version 6.

Aussi, les problèmes d'allocations et de libération de mémoire ne sont pas toujours la faute du programmeur mais aussi peuvent provenir d'une faute de conception.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3129
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Timon le Ven 1 Fév - 8:50

manianis a écrit:Aussi, les problèmes d'allocations et de libération de mémoire ne sont pas toujours la faute du programmeur mais aussi peuvent provenir d'une faute de conception.
C'est peu probable. Les compilateurs conformes sont rarement sujets à des bugs. Si je me souviens bien, une étude dit que, quand un programme a un bug, il n'y a que 5% de risques que cela provienne du compilateur.
A partir de là, on peut totalement faire confiance aux fonctions d'allocation mémoire à partir du moment où on n'oublie pas de vérifier leur retour.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3036
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Timon le Sam 2 Fév - 11:11

manianis a écrit:Oui, justement, c'est trés simple à dire mais les exceptions sont multiples. Les bugs font que parfois des fonctions standard ne réagissent pas de la manière attendue et qu'il génèrent des problèmes de mémoire.
Je crois comprendre ce que vous vouliez dire : lorsqu'on passe des paramètres que la fonction ne "s'attend" pas à avoir, elle peut planter (ou faire autre chose).
C'est normal, c'est un comportement indéterminé défini par la norme. En effet, les implémenteurs de compilateurs ne sont pas obligés de gérer les cas comme fopen(NULL, NULL), malloc(0), strlen(NULL), isdigit(-20) (sauf si EOF = -20), etc.
En appliquant les principes de la programmation défensive, on arrive assez facilement à éviter ce genre de cas.


Dernière édition par le Sam 2 Fév - 16:13, édité 1 fois

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3036
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Napoléon le Sam 2 Fév - 13:37

Timon:
à votre avis, pourquoi fopen(NULL, NULL)n'est pas géré par certains compilateurs? Peut-tu présenter en quelques mots la programmation défensive?

_________________
Nabil - tunis
خير الناس أنفعهم للناس

Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 4746
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Timon le Sam 2 Fév - 17:18

nabiL a écrit:Timon:
à votre avis, pourquoi fopen(NULL, NULL)n'est pas géré par certains compilateurs?
C'est simple : on demande à ouvrir "rien" en mode "rien". Ca n'a absolument aucun sens.
Comme les fonctions standard sont beaucoup utilisées, le Comité a décidé de ne pas forcer les implémenteurs de vérifier les paramètres. Cela permet à long terme une augmentation des performances.
fopen() tente alors de déréférencer ses paramètres qui sont NULL. Le déréférencement de NULL provoquant un comportement indéterminé, la stabilité du programme n'est plus.
Peut-tu présenter en quelques mots la programmation défensive?
Elle consiste à vérifier que chaque donnée est, à tout instant, parfaitement contrôlée et que le programme est capable de réagir face à n'importe quelle situation étrange.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3036
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par methodiX le Sam 2 Fév - 23:24

Merci pour la réponse Timon.
En fait, que veut dire exactement :
En effet, les implémenteurs de compilateurs ne sont pas obligés de gérer les cas comme fopen(NULL, NULL), malloc(0),

Il y a les codes retour non? 0 si aucune erreur sinon le code de l'erreur.
C'est vrai il y a des fonctions qui retournent des valeurs entières non nulles par exemple "descripteur d'un fichier" ... dans ce cas, il faut gérer les erreurs autrement à mon avis.
J'espère que je me suis bien exprimé (je ne suis pas informaticien Smile )

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum

methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4128
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par manianis le Dim 3 Fév - 0:24

Timon :
Si les valeurs passées aux dites fonctions possèdent un type correct ou un type qui lui est compatible alors la ce n'est pas la tache du compilateur de vérifier la validité de ces valeurs.

Il n'est pas logique de faire des appels du type fopen(NULL, NULL). Le programmeur a commis une faute de conception. Je ne sais pas si peut être dé-référencer mais je sais qu'il a été déclaré comme un define. Et à ce que je sais il faudra pour le redéfinir faire appel à undef.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3129
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par methodiX le Dim 3 Fév - 0:33

manianis a écrit:Timon :
Si les valeurs passées aux dites fonctions possèdent un type correct ou un type qui lui est compatible alors la ce n'est pas la tache du compilateur de vérifier la validité de ces valeurs.

Il n'est pas logique de faire des appels du type fopen(NULL, NULL). Le programmeur a commis une faute de conception. Je ne sais pas si peut être dé-référencer mais je sais qu'il a été déclaré comme un define. Et à ce que je sais il faudra pour le redéfinir faire appel à undef.

Je n'ai pas bien saisi Sad

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum

methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4128
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Timon le Dim 3 Fév - 1:54

methodiX a écrit:Il y a les codes retour non? 0 si aucune erreur sinon le code de l'erreur.
Il y a des codes d'erreurs mais ils ne traitent pas forcément tous les cas. Prenons strtol() :
Si on écrit strtol(s_chaine, NULL, 10) avec s_chaine, chaîne valide, quelque soit son contenu, son comportement est parfaitement défini et LONG_MIN, LONG_MAX et 0 peuvent plus ou moins servir de codes d'erreur.
Si s_chaine est NULL, il n'y a pas de code d'erreur, seulement un comportement indéterminé.
C'est vrai il y a des fonctions qui retournent des valeurs entières non nulles par exemple "descripteur d'un fichier" ... dans ce cas, il faut gérer les erreurs autrement à mon avis.
Ces fonctions renvoient -1 en cas d'erreur sauf paramètre NULL.
manianis a écrit:Il n'est pas logique de faire des appels du type fopen(NULL, NULL). Le programmeur a commis une faute de conception.
En effet mais ça peut arriver et on doit bien savoir ce qu'il passera dans ce cas : à savoir, n'importe quoi.
Je ne sais pas si peut être dé-référencer mais je sais qu'il a été déclaré comme un define. Et à ce que je sais il faudra pour le redéfinir faire appel à undef.
Que voulez-vous dire ?

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3036
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par manianis le Dim 3 Fév - 14:17

Timon: Je ne sais pas si NULL peut être dé-référencé mais je sais qu'il a été
déclaré comme un define. Et à ce que je sais il faudra pour le
redéfinir faire appel à undef.

methodiX: les fichiers #include sont appelées des fichiers d'entêtes et elles contiennent uniquement des prototypes de fonctions (càd la déclaration de la fonction sans implémentation). Ces prototypes servent à déterminer le type des arguments passées à une fonction. Et elles permettent au compilateur de déterminer si l'utilisateur a passé les bons arguments.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3129
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Timon le Dim 3 Fév - 15:23

manianis a écrit:Timon: Je ne sais pas si NULL peut être dé-référencé mais je sais qu'il a été
déclaré comme un define. Et à ce que je sais il faudra pour le
redéfinir faire appel à undef.
Quel serait l'intérêt à la redéfinir avec la directive #define ? D'ailleurs, il me semble que la norme indique bien que la redéfinition des macros standard n'est pas légale.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3036
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Langage C : cours + exercices corrigés + TPs + exams

Message par Contenu sponsorisé Aujourd'hui à 7:58


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum