2011-03-10 3 views
0

Je ne suis pas clair avec le code suivantinitialisation macro pas clair

struct nsproxy init_nsproxy = INIT_NSPROXY(init_nsproxy); 

ceci peut être vu ici http://lxr.free-electrons.com/source/kernel/nsproxy.c?v=2.6.28#L27

Je ne suis pas en mesure de comprendre l'utilisation de INIT_NSPROXY macro qui est ici http://lxr.free-electrons.com/source/include/linux/init_task.h?v=2.6.28#L53

la macro est définie pour utiliser INIT_NSPROXY (nsproxy) mais lorsque l'extrait ci-dessus est en cours d'initialisation, elle utilise INIT_NSPROXY (init_nsproxy) comment cela est-il possible?

Répondre

1
#define INIT_NSPROXY(nsproxy) // etc. 

Dans cette définition macro, nsproxy est le nom du paramètre à la macro.

Dans la liste de remplacement de macro (tout sur la ligne après la partie #define INIT_NSPROXY(nsproxy)), partout où le jeton nsproxy apparaît, il est remplacé par l'argument passé.

Dans ce cas, l'argument init_nsproxy est en cours de transmission.

+1

Une source possible de confusion dans ce cas particulier est que la définition de macro liée n'utilise pas réellement le paramètre. Le paramètre est inclus pour la cohérence avec d'autres macros similaires. –

+0

@Winston Ewert oui correct qui me confond. –

+1

@Rahu: Si le paramètre n'est utilisé nulle part, il est simplement ignoré et peu importe ce que vous passez en argument. –

0

Dans cette forme, vous pouvez considérer la macro comme un appel de fonction. Le nom de la fonction est INIT_NSPROXY et le nom du paramètre est nsproxy. A l'intérieur de la macro INIT_NSPROXY, nsproxy est remplacé par l'identifiant qui lui a été transmis.