Dans /usr/include/asm/swab.h j’ai trouvé le code suivant:
static __inline__ __u32 __arch_swab32(__u32 val) { __asm__("bswapl %0" : "=r" (val) : "0" (val)); return val; } #define __arch_swab32 __arch_swab32
Quelle est la signification de la dernière ligne, définissant un nom comme tel?
Ceci est appelé macro auto-référencée :
Une utilisation courante et utile de la référence à soi consiste à créer une macro qui se développe elle-même. Si vous écrivez
#define EPERM EPERM
alors la macro
EPERM
développe enEPERM
. En effet, il est laissé seul par le préprocesseur chaque fois qu’il est utilisé dans le texte en cours d’exécution. Vous pouvez dire que c’est une macro avec#ifdef
. Vous pouvez le faire si vous souhaitez définir des constantes numériques avec unenum
, mais que#ifdef
soit vrai pour chaque constante.