Значение определения NULL для макроса в C - PullRequest
0 голосов
/ 27 января 2020

Я писал простой код для доступа к данным моего драйвера через запись в procfs. Просматривая файл заголовка proc_fs.h, я натолкнулся на макрос:

#define proc_create(name, mode, parent, proc_fops) ({NULL;})

Как работает этот макрос, так как его расширение равно NULL?

1 Ответ

0 голосов
/ 27 января 2020

Расширение ({...}) является расширением cc и называется выражением оператора . Это утверждение, которое может использовать выражения. Последний оператор, использованный внутри выражения оператора, является значением выражения.

Следующее возвращает true:

return ({NULL;}) == NULL;

Как работает этот макрос,

Макрос proc_create с любыми 4 аргументами расширяется до ({NULL;}).

, поскольку его расширение равно NULL?

Расширение не NULL, но символы ({NULL;}). Расширение этого макроса - это выражение, которое оценивается как NULL.

...