Issue
In r8169_main.c in linux kernel source there is a struct like this
#define KBUILD_MODNAME "foo"
static struct pci_driver rtl8169_pci_driver = {
.name = KBUILD_MODNAME,
.id_table = rtl8169_pci_tbl,
.probe = rtl_init_one,
.remove = rtl_remove_one,
.shutdown = rtl_shutdown,
.driver.pm = pm_ptr(&rtl8169_pm_ops),
};
I like to in first member .name but there is no data type specified and there is .
before name
like .name = KBUILD_MODNAME,
what is it called. is this name member defined somewhere else what this static struct means I did not seen this type of struct before. Can any one please tell what is this and its even assigned a value in struct declaration???
can I also create array of this type of struct?
Solution
what is it called.
name
is a member of structure struct pci_driver
.
The initialization form is called designated initialization. The part .name = something
is designator.
is this name member defined somewhere else
Yes, in include/linux/pci.h.
what this static struct means I did not seen this type of struct before
The line defines a variable rtl8169_pci_driver
of type struct pci_driver
. The static
keyword modifies variable lifetime - it means the variable is valid for the whole duration of the program.
static struct pci_driver rtl8169_pci_driver = {...}
^^^^^^^ - initialization
^^^^^^^^^^^^^^^^^ - variable name
^^^^^^^^^^^^^^^^ - variable type
^^^^^ - storage specifier
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable declaration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable definition
Research https://en.cppreference.com/w/c/language/declarations https://en.cppreference.com/w/c/language/struct_initialization https://en.cppreference.com/w/c/language/storage_duration
can I also create array of this type of struct?
You can create arrays of struct pci_driver
s.
static struct pci_driver example_array[20] = {
{ .name = initilization_for_first_element, ... },
{ .name = initilization_for_second_element, ... },
... etc.
};
Answered By - KamilCuk