инициализация макроса не ясна - PullRequest
0 голосов
/ 10 марта 2011

Мне не понятно следующий код

struct nsproxy init_nsproxy = INIT_NSPROXY(init_nsproxy);

это можно увидеть здесь http://lxr.free -electrons.com / источник / ядро ​​/ nsproxy.c? V = 2.6.28 # L27

Я не могу понять использование макроса INIT_NSPROXY, который здесь http://lxr.free -electrons.com / источник / включать / Linux / init_task.h? V = 2.6.28 # L53

макрос определен для использования INIT_NSPROXY (nsproxy), но когда приведенный выше фрагмент инициализируется, он использует INIT_NSPROXY (init_nsproxy), как это возможно?

Ответы [ 2 ]

1 голос
/ 10 марта 2011
#define INIT_NSPROXY(nsproxy) // etc.

В этом определении макроса nsproxy - это имя параметра для макроса.

В списке замены макросов (все в строке после части #define INIT_NSPROXY(nsproxy)) везде, где появляется токен nsproxy, он заменяется любым переданным аргументом.

В этомВ этом случае передается аргумент init_nsproxy.

0 голосов
/ 10 марта 2011

В этой форме вы можете думать о макросе как о вызове функции.Имя функции - INIT_NSPROXY, а имя параметра - nsproxy.Внутри макроса INIT_NSPROXY nsproxy заменяется тем идентификатором, который был ему передан.

...