Comprendre C errno

Sur mon système, errno défini comme:

 int * __error(void); #define errno (* __error()) 

Je comprends que errno est une macro et se développe en fonction * __error() :

  1. J’ai cherché partout (source sur mon système) mais je ne trouve pas la définition de la fonction __error() . Quelqu’un peut-il afficher / expliquer quelle serait / devrait être la définition de cette fonction?

  2. Comment l’expression errno = 0 fonctionne avec la définition ci-dessus (Assigner 0 à une fonction?)? errno = 0 * __error() = 0 à * __error() = 0 ?

Merci

La fonction __error renvoie un pointeur sur la variable errno du thread appelant. La macro errno déréférence ce pointeur, résultant en une valeur qui peut apparaître de part et d’autre d’un signe égal.

Pour répondre à vos questions:

  1. La fonction détermine l’adresse correcte pour la variable errno pour ce thread spécifique. Chaque fil obtient son propre.

  2. Oui, cela devient (* __error()) = 0; qui atsortingbue 0 à la variable errno ce fil.