为什么在结构中放入struct的大小?

Mag*_*nus 0 c api

我第一次开始在Windows上使用SetupAPI,并注意到在调用填充结构的函数之前,我总是需要将结构的大小放入结构中.例如:

SP_DEVICE_INTERFACE_DATA dintf_data;
dintf_data.cbSize = sizeof(dintf_data);
SetupDiEnumDeviceInterfaces(di, NULL, &GUID_DEVINTERFACE_USB_DEVICE, 0, &dintf_data);
Run Code Online (Sandbox Code Playgroud)

这样做的原因是什么?

这是实现他们想要达到的目标的好方法,还是有更好的方法?

(我能想到的唯一原因是它是处理API版本控制的一种方式.)

Jim*_*uck 5

是的,你得到了它,API版本.

操作系统检查传入的大小以确定您正在使用的结构版本.随着为较新版本的API添加功能,添加字段(从未删除)以增加字段大小,因此操作系统可以轻松准确地知道您正在使用的版本.