C Синтаксис вопрос - PullRequest
       6

C Синтаксис вопрос

8 голосов
/ 20 июля 2011

Этот вопрос возник, когда я недавно открыл довольно старый драйвер для моего устройства raid.Чтобы иметь возможность скомпилировать драйвер для системы Linux, я начал исследовать все те ошибки, которые я получил на выходе.И я наткнулся на такой синтаксис, используемый в источниках драйверов:

struct file_operations t3_fops = {
        owner:                  THIS_MODULE,
        ioctl:                  ft_ioctl,
        fasync:                 ft_fasync,
        open:                   ft_open,
        release:                ft_release
};

Итак, ребята, не могли бы вы помочь мне понять, что означает ":"?Это синтаксис C вообще?Я знаю, что есть определение битового поля, но для меня это выглядит несколько иначе.

Ответы [ 2 ]

6 голосов
/ 20 июля 2011

Этот синтаксис для инициализации элементов структуры называется обозначенным инициализатором .: - это более старый специфичный для GCC синтаксис.Это задокументировано в руководстве GCC .

6 голосов
/ 20 июля 2011

Это синтаксис инициализации структуры C99.owner, ioctl и т. Д. - это имена полей в структуре, а THIS_MODULE, ft_ioctl и т. Д. - это значения.Это эффективно делает следующее, кроме во время компиляции:

struct file_operations t3_fops;
t3_fops.owner = THIS_MODULE;
t3_fops.ioctl = ft_ioctl;
...

Новый синтаксис хорош, потому что он делает инициализацию работающей независимо от порядка полей структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...