请问在执行代码:
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()。

被折叠的 条评论
为什么被折叠?



