Структуры в C и C++

244
04 февраля 2018, 01:42

Пишу на C++. Случайно наткнулся на такой код, хотелось бы узнать что здесь происходит и можно ли такое повторить на C++.

static struct pci_driver my_driver = {
    .name = "my_pci_driver",
    .id_table = my_driver_id_table,
    .probe = my_driver_probe,
    .remove = my_driver_remove
};

И еще - зачем перед объявлением экземпляра структуры в C нужно указывать ключевое слово struct, а в C++ - нет?

Answer 1

И еще - зачем перед объявлением экземпляра структуры в C нужно указывать ключевое слово struct, а в C++ - нет?

С и С++ - разные языки с разными правилами.

хотелось бы узнать что здесь происходит

Это синтаксис инициализации с тегами (tagged initializers), введенный в язык С в стандарте С99. Что именно там происходит по-моему довольно очевидно: вы явно указываете какой член структуры хотите инициализировать каждым значением, тем самым делая инициализатор независимым от порядка объявления полей в структуре.

можно ли такое повторить на C++

C++ пока не поддерживает синтаксис инициализации с тегами, и прямого аналога на уровне ядра языка нет. Если я не ошибаюсь, поддержка этого синтаксиса в некоей модифицированной/урезанной форме - в планах для C++20. Ранее предложения поддержки этого синтаксиса в С++ упорно отвергались комитетом из-за сопутствующих сложностей, возникающих в контексте С++ инициализации.

READ ALSO
Сбрасывание данных на диск

Сбрасывание данных на диск

В какой момент происходит фактическая запись информации на диск?

224
C++\Qt Получение доступа к компонентам

C++\Qt Получение доступа к компонентам

В программе есть компоненты, которые отвечают за определенный функционалКомпонент реализован при помощи MVC, (классы Model, Controller, View)

215
Как пути до исходников в Qt Creator

Как пути до исходников в Qt Creator

Есть динамическая библиотека собранная с отладочной информацией и исходники к нейПри отладке приложения которое использует эту библиотеку...

238