c语言 - "_inout"参数可以是"const"吗?

  • 本文关键字:const 参数 语言 inout c sal
  • 更新时间 :
  • 英文 :


我的理解是,如果指针指向读写的东西,即">inout";那么根据定义;const";(因为"out"(然而,在C报头中存在将参数指定为"out"的原型inoutconst";这对我来说没有意义

EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTEnumAdapters2(_Inout_ CONST D3DKMT_ENUMADAPTERS2*);

正如我上面提到的,我看不出这个参数怎么会是"0";const";考虑到它也是";输出";。

我是误解了什么,还是这个定义不正确?

谢谢你的帮助。

`

理论上,当声明为_Inout_的参数是指向结构的指针时,没有什么可以阻止该参数具有const限定符。

例如,对D3DKMTEnumAdapters2的调用中的自变量是指向D3DKMT_ENUMADAPTERS2结构的指针,其定义如下:

typedef struct _D3DKMT_ENUMADAPTERS2 {
ULONG              NumAdapters;
D3DKMT_ADAPTERINFO *pAdapters;
} D3DKMT_ENUMADAPTERS2;

现在,如果pAdapters成员是预先分配的D3DKMT_ADAPTERINFO对象数组(大小在NumAdapters成员中指定(,并且所有函数所做的都是用每个适配器的相关信息填充该数据数组,那么传递的结构本身将不会被修改,因此与参数上的const限定符没有冲突。

然而,从D3DKMTEnumAdapters2的文档来看,NumAdapers成员本身似乎也发生了变化(可能(:

当D3DKMT_ENUMADAPTERS2::pAdapters为null时,D3DKMT_ENUMADAPTERS2::NumAdapters设置为支持的最大值适配器计数。被调用者通常会首先调用该方法检索支持的最大适配器计数。

因此,根据该段落,当使用传递(指向(结构的pAdapters成员的NULL值调用函数时,将违反const属性。


注意,链接文档也暗示NumAdapters成员被修改,即使给出了非空的pAdapters值(强调矿(:

调用方传入数组大小和空数组空间。被叫方验证数组中有足够的空间,填充数组,并返回多少使用了阵列的

最新更新