Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Définition de macro dans le noyau NetBSD

2 réponses
Avatar
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.

2 réponses

Avatar
Vincent Guichard
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
Avatar
JKB
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.