Traitement des erreurs
Le langage de programmation Aztec C effectue le traitement des erreurs en se rapportant à l'entier global errno. Cette variable est modifiée par les fonctions standard d'entrées/sorties, d'entrées/sorties sans tampon et scientifiques (par exemple les fonctions sin, sqrt) dans le cadre de leur traitement d'erreur. Lorsqu'une entrée/sortie standard, une entrée/sortie sans tampon ou une fonction scientifique détecte une erreur, elle définit un code dans errno décrivant l'erreur. Si aucune erreur ne se produit, les fonctions scientifiques ne modifient pas errno. Si aucune erreur ne se produit, les fonctions d'entrées/sorties peuvent ne pas modifier errno. De plus, lorsqu'une erreur se produit :
- une fonction d'entrée/sortie standard renvoie -1 et définit un indicateur d'erreur pour le flux de données sur lequel l'erreur s'est produite;
- une fonction d'entrée/sortie sans tampon renvoie -1;
- une fonction scientifique renvoie une valeur arbitraire.
Lors de l'exécution de calculs scientifiques, un programme peut vérifier errno pour les erreurs lorsque chaque fonction est appelée. Alternativement, comme errno n'est modifié que lorsqu'une erreur se produit, errno ne peut être vérifié qu'après une séquence d'opérations; s'il est différent de zéro, une erreur s'est produite à un moment donné de la séquence. Cette dernière technique ne peut être utilisée que lorsqu'aucune opération d'entrée/sortie ne se produit pendant la séquence d'appels de fonctions scientifiques. Comme errno peut être modifié par une fonction d'entrée/sortie même si une erreur ne s'est pas produite, un programme ne peut pas effectuer une séquence d'opérations d'entrée/sortie, puis vérifier errno par la suite pour détecter une erreur. Les programmes exécutant des entrées/sorties sans tampon doivent vérifier le résultat de chaque appel d'entrée/sortie pour une erreur. Les programmes exécutant des opérations d'entrées/sorties standard ne peuvent pas, après une séquence d'appels d'entrées/sorties standard, vérifier errno pour voir si une erreur s'est produite. Cependant, un indicateur d'erreur est associé à chaque flux ouvert. Cet indicateur est défini lorsqu'une erreur se produit sur le flux et reste défini jusqu'à ce que le flux soit fermé ou que l'indicateur soit explicitement réinitialisé. Ainsi, un programme peut effectuer une séquence d'opérations d'entrées/sorties standard sur un flux de données, puis vérifier l'indicateur d'erreur du flux de données.
Le tableau suivant répertorie les valeurs pouvant être placées dans errno. De plus, des valeurs positives peuvent être définies dans errno suite à une opération d'entrées/sorties : ce sont des codes d'erreur renvoyés par le bdos de CP/M. Les valeurs symboliques répertoriées ci-dessous sont définies dans le fichier d'entête errno.h :
#define ENOENT -1 /* fichier ne existe pas */
#define E2BIG -2 /* non utilisé */
#define EBADF -3 /* mauvais descripteur de fichier - le fichier n'est pas ouvert ou une opération incorrecte est demandée */
#define ENOMEM -4 /* mémoire insuffisante pour l'opération demandée */
#define EEXIST -5 /* le fichier existe déjà sur demande de création */
#define EINVAL -6 /* paramètre invalide */
#define ENFILE -7 /* a dépassé le nombre maximum de fichiers ouverts */
#define EMFILE -8 /* a dépassé le nombre maximum de descripteurs de fichier */
#define ENOTTY -9 /* ioctl tenté sur une non-console */
#define EACCES -10 /* demande d'accès invalide */
#define ERANGE -20 /* la valeur de la fonction mathématique ne peut pas être calculée */
#define EDOM -21 /* paramètre non valide de la fonction mathématique */