C语言结构体的初始化时并不会调用其成员函数

请问在执行代码:

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
  • 在这个过程中,FbDeviceInitFbDeviceExit 等函数只是被作为函数指针赋值给 g_tFramebufferOpr 的成员 DeviceInitDeviceExit 等。
  • 函数不会在赋值时被调用,只有当这些成员函数指针被明确调用时(如 g_tFramebufferOpr.DeviceInit()),相应的函数才会执行。

何时会运行这些函数?

这些函数会在程序其他地方通过 g_tFramebufferOpr 调用时运行,例如:

g_tFramebufferOpr.DeviceInit();
g_tFramebufferOpr.GetBuffer(ptDispBuff);

结论

在定义并初始化结构体变量 g_tFramebufferOpr 时,代码只是完成了函数指针赋值,不会调用 FbDeviceInit()FbDeviceExit()FbGetBuffer()FbFlushRegion()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值