Définition de macro dans le noyau NetBSD

Le
JKB
Bonjour à tous,

Je suis en train de débugguer un noyau NetBSD, plus exactement le
support multiprocesseur du noyau sparc 5.99 et je viens de tomber sur la
construction suivante. Dans un fichier d'en-tête, j'ai un superbe :

#define FPU_LOCK(s) do {
(void)&(s);
mutex_enter(&fpu_mtx);
} while (/* CONSTCOND */ 0)


Il faut noter que s est toujours déclaré comme un int. Voir pour
cela sparc/machdep.c.

int s;
FPU_LOCK(s);

Je ne vois pas à quoi sert la construction (void)&(s). J'ai même
l'impression que ça ne sert pas à grand'chose, mais je dois faire
une erreur quelque part

Merci pour toute explication.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Vincent Guichard
Le #21055261
Le 26/01/2010 13:45, JKB a écrit :
Bonjour à tous,

Je suis en train de débugguer un noyau NetBSD, plus exactement le
support multiprocesseur du noyau sparc 5.99 et je viens de tomber sur la
construction suivante. Dans un fichier d'en-tête, j'ai un superbe :

#define FPU_LOCK(s) do {
(void)&(s);
mutex_enter(&fpu_mtx);
} while (/* CONSTCOND */ 0)





Je dirais que cela sert à empêcher le compilateur de se plaindr e de la
non utilisation de s. Sur d'autres architectures, la macro est défin ie
avec un s qui sert à quelque chose.

De cette façon, on a le code applicatif qui reste identique et se
compile sans message d'erreur quelle que soit la plateforme.

Vincent Guichard
JKB
Le #21055351
Le 26-01-2010, ? propos de
Re: Définition de macro dans le noyau NetBSD,
Vincent Guichard ?crivait dans fr.comp.lang.c :
Le 26/01/2010 13:45, JKB a écrit :
Bonjour à tous,

Je suis en train de débugguer un noyau NetBSD, plus exactement le
support multiprocesseur du noyau sparc 5.99 et je viens de tomber sur la
construction suivante. Dans un fichier d'en-tête, j'ai un superbe :

#define FPU_LOCK(s) do {
(void)&(s);
mutex_enter(&fpu_mtx);
} while (/* CONSTCOND */ 0)





Je dirais que cela sert à empêcher le compilateur de se plaindre de la
non utilisation de s. Sur d'autres architectures, la macro est définie
avec un s qui sert à quelque chose.



Ça n'est défini que sur sparc et toujours utilisé avec un int.
Effectivement, le truc est là pour raison de compatibilité et évite
que le compilo ne râle sur une variable s inutilisée... Bien vu.
J'avais pensé à tout sauf à cela.

De cette façon, on a le code applicatif qui reste identique et se
compile sans message d'erreur quelle que soit la plateforme.



Merci,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Publicité
Poster une réponse
Anonyme