请问在执行代码:
static DispOpr g_tFramebufferOpr = {
.name = "fb",
.DeviceInit = FbDeviceInit,
.DeviceExit = FbDeviceExit,
.GetBuffer = FbGetBuffer,
.FlushRegion = FbFlushRegion,
};
时,会不会运行函数FbDeviceInit()、函数FbDeviceExit()、函数FbGetBuffer()、函数FbFlushRegion()。
答:
在执行代码:
static DispOpr g_tFramebufferOpr = {
.name = "fb",
.DeviceInit = FbDeviceInit,
.DeviceExit = FbDeviceExit,
.GetBuffer = FbGetBuffer,
.FlushRegion = FbFlushRegion,
};
时,不会运行函数 FbDeviceInit()
、FbDeviceExit()
、FbGetBuffer()
、FbFlushRegion()
。
原因
- 上述代码只是定义并初始化了一个
DispOpr
类型的结构体变量g_tFramebufferOpr
。 - 在这个过程中,
FbDeviceInit
、FbDeviceExit
等函数只是被作为函数指针赋值给g_tFramebufferOpr
的成员DeviceInit
、DeviceExit
等。 - 函数不会在赋值时被调用,只有当这些成员函数指针被明确调用时(如
g_tFramebufferOpr.DeviceInit()
),相应的函数才会执行。
何时会运行这些函数?
这些函数会在程序其他地方通过 g_tFramebufferOpr
调用时运行,例如:
g_tFramebufferOpr.DeviceInit();
g_tFramebufferOpr.GetBuffer(ptDispBuff);
结论
在定义并初始化结构体变量 g_tFramebufferOpr
时,代码只是完成了函数指针赋值,不会调用 FbDeviceInit()
、FbDeviceExit()
、FbGetBuffer()
或 FbFlushRegion()
。