c - 结构是声明或定义还是内核源代码中的某种类型的面向对象行为
问题描述
在 linux 内核源代码的 r8169_main.c 中有一个这样的结构
#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),
};
我喜欢在第一个成员 .name 中,但没有指定数据类型,并且.
之前有它叫什么name
。.name = KBUILD_MODNAME,
这个名称成员是否在其他地方定义了这个静态结构的含义我以前没有见过这种类型的结构。谁能告诉这是什么,甚至在结构声明中分配了一个值???
我也可以创建这种结构的数组吗?
解决方案
这叫什么。
name
是结构的成员struct pci_driver
。
这种初始化形式称为指定初始化。零件.name = something
是代号。
此名称成员是否在其他地方定义
是的,在include/linux/pci.h中。
这个静态结构意味着什么我以前没有见过这种类型的结构
该行定义rtl8169_pci_driver
了一个类型为 的变量struct pci_driver
。static
关键字修改变量的生命周期——这意味着变量在程序的整个持续时间内都有效。
static struct pci_driver rtl8169_pci_driver = {...}
^^^^^^^ - initialization
^^^^^^^^^^^^^^^^^ - variable name
^^^^^^^^^^^^^^^^ - variable type
^^^^^ - storage specifier
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable declaration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable definition
研究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
我也可以创建这种结构的数组吗?
您可以创建struct pci_driver
s 的数组。
static struct pci_driver example_array[20] = {
{ .name = initilization_for_first_element, ... },
{ .name = initilization_for_second_element, ... },
... etc.
};
推荐阅读
- java - I/O-TxtFile 行距程序| JAVA
- javascript - React material-ui组件,实现类时如何覆盖JSS样式
- python - 如何在 Python 中处理这个 JSON 文件?
- php - 在 woocommerce 3 中调整产品图像的 Zoom 放大倍数
- ruby - 除了读取实例变量之外,attr_reader 在 ruby 中还有什么其他用途
- android - 无法使用 Jetifier 转换 com.android.tools.build\builder\3.1.4\builder-3.1.4.jar'。原因:重复条目:module-info.class
- node.js - 在监听套接字 io 时更新传单上的标记位置
- python - Opencv - 在精明边缘检测后找到血管轮廓
- gradient - 不同维度的不同尺度的自动编码器?
- c++ - 使用 GLM 库在 OpenGL 中绘制顶点时如何使用常规坐标系