Programmation C source/erreurs
int main(void)
 printf("----------------------------------------\n");
 printf(" 1. Utilisation\n");
 printf("----------------------------------------\n");
 Pour gérer les erreurs, nous avons
 errno.h
 cet en-tête déclare notamment une variable globale errno
 et un certain nombre de codes d'erreur, qui permettent
 aux fonctions de la bibliothèque standard de reporter
 précisément la cause d'une erreur.
 errno est de type int
 remarque : errno peut être définie par une macro ou un identificateur.
 N'essayez pas de récupérer son adresse.
 pour utiliser errno
 il faut mettre errno à 0 avant d'utiliser la fonction qui peut échouer
 puis tester si la fonction a échoué
 remarque : chaque fonction indique à sa façon qu'elle a échoué
 et enfin en cas d'echec utiliser errno
 printf("\n----------------------------------------\n");
 printf(" 2. Affichage d'un message d'erreur\n");
 printf("----------------------------------------\n");
 #if 0
 #include <string.h>
 char * strerror(int code);
 #endif
 Cette fonction permet de connaître la signification textuelle d'une valeur de
 errno. À noter que pour la chaine retournée, il est sage de présupposer qu'elle a
 une durée de vie la plus courte possible. N'essayez pas de modifier le contenu
 de la chaîne, affichez-la directement ou copiez-la dans une zone temporaire.
 Un autre intérêt de passer par cette fonction est que les messages retournés sont
 adaptés à la localisation (langue) du système.
 #if 0
 #include <errno.h>
 void perror(const char *chaine);
 #endif
 perror, permet d'envoyer le message correspondant à errno sur le flux des erreurs
 stderr. Le paramètre chaine, s'il est différent de NULL, est une chaine de
 caractère passée par le programmeur et affichée avant le message d'erreur.
 printf("\n----------------------------------------\n");
 printf(" 3. Exemple\n");
 printf("----------------------------------------\n");
 char * chaineInvalide;
 unsigned long int variable = strtoul("12345invalide", &chaineInvalide, 10);
 printf("variable = %lu\n", variable);
 printf("%s\n", chaineInvalide);
 errno = 0;
 variable = strtoul("12345678901234567890", &chaineInvalide, 10);
 if (variable == ULONG_MAX && errno != 0)
 perror("ERREUR strtoul()");
 return 0;

Programmation C source/mathématiques
int main(void)
 /*
 #include 
 #include <errno.h>
 avec gcc il faut ajouter -lm à la compilation !
 printf("----------------------------------------\n");
 printf(" 1. Exponentielle et puissance\n");
 printf("----------------------------------------\n");
 #if 0
 double exp ( double x );
 double pow ( double x, double y );
 #endif
 printf("exp(10) = %f\n", exp(10));
 printf("10³ = %f\n", pow(10, 3));
 ERREURS
 La fonction pow() peut renvoyer les erreurs suivantes :
 EDOM L’argument x est négatif, et y n’est pas entier.
 Le résultat serait un nombre complexe.
 printf("\n----------------------------------------\n");
 printf(" 2. Logarithmes\n");
 printf("----------------------------------------\n");
 #if 0
 double log ( double x ); // logarithme népérien de x
 double log10 ( double x ); // logarithme à base 10 de x
 #endif
 ERREURS
 EDOM L’argument x est négatif.
 ERANGE L’argument x est nul. Le logarithme de zéro est indéfini.
 printf("\n----------------------------------------\n");
 printf(" 3. Racine carrée\n");
 printf("----------------------------------------\n");
 #if 0
 double sqrt ( double x );
 #endif
 ERREURS
 EDOM x est négatif.
 printf("\n----------------------------------------\n");
 printf(" 4. Sinus, cosinus, tangente\n");
 printf("----------------------------------------\n");
 #if 0
 double sin ( double x );
 double cos ( double x );
 double tan ( double x );
 #endif
 x étant fourni en radians.
 printf("\n----------------------------------------\n");
 printf(" 5. Arc sinus, arc cosinus\n");
 printf("----------------------------------------\n");
 #if 0
 double asin ( double x );
 double acos ( double x );
 #endif
 ERREURS
 EDOM x est hors du domaine de définition.
 (x est inférieur à -1 ou supérieur à 1.)
 printf("\n----------------------------------------\n");
 printf(" 6. Arc tangente\n");
 printf("----------------------------------------\n");
 #if 0
 double atan ( double x );
 double atan2 ( double y, double x );
 #endif
 return 0;

Programmation C source/gestion de la mémoire