首页 > 其他分享 >保留参数的概念和使用场景

保留参数的概念和使用场景

时间:2022-11-01 19:56:59浏览次数:51  
标签:__ opt 场景 扩展 保留 参数

什么是保留参数(reserved parameter)

某些 API 函数的部分参数要求调用者必须传入指定的固定值,且这些参数名中通常带 reserved 字样。一般来说,调用者不遵守此约定会导致调用失败。

例如,Windows API 中的:

LONG WINAPI RegQueryValueEx(
  __in         HKEY hKey,
  __in_opt     LPCTSTR lpValueName,
  __reserved   LPDWORD lpReserved,
  __out_opt    LPDWORD lpType,
  __out_opt    LPBYTE lpData,
  __inout_opt  LPDWORD lpcbData
);

这里的 lpReserved 必须传 NULL,不然调用失败。

为什么要有保留参数

主要原因有两个。

一是方便扩展,且扩展不改变 ABI。如果没有保留参数,那么扩展函数功能必须另外取名(提供一个新函数),例如 accept2accept3accept4 这样很丑的名字。

二是供内部调用使用。例如,用户态程序调用必须传指定值,而系统内部可以使用这个值达成某种目的。

还有一种说法是这个参数之前有用,现已废弃。我认为可能性不大,如果要求废弃的参数必须传指定值,那么旧程序就会失效。

什么时候设计保留参数

需要 ABI 长期兼容且有比较大概率需要扩展的场景可以考虑使用保留参数。

反之,不需要 ABI 兼容的场景或已经确定无扩展需要的场景不应使用保留参数。用了反而给调用者和库作者带来必须要的干扰。

以下情况不应使用保留参数:

  • HTTP API,增加参数之后客户端不用修改,只要在服务端处理默认值。
  • 私有库,需要扩展时,双方都改。
  • 参数已彻底设计好。
  • 短期产品或项目。

怎样设计保留参数

(1)切勿滥用。

(2)保留参数一般放在最后一个。

(3)保留参数的类型要适应尽可能多的情况。例如,C 语言库的保留参数类型一般为 void*,将来可以改成任何指针类型。

标签:__,opt,场景,扩展,保留,参数
From: https://www.cnblogs.com/jthmath/p/16848935.html

相关文章

  • Istio典型应用场景
    Istio作为服务治理的工具,使用户不需要在项目中编写代码即可实现微服务治理。主要应用分布式调用追踪、遥测度量收集、灰度发布应用、熔断、故障注入等几个方面场景。Istio......
  • ASEMI肖特基二极管SS210L参数,SS210L规格,SS210L封装
    编辑-ZASEMI肖特基二极管SS210L参数:型号:SS210L最大重复峰值反向电压(VRRM):100V最大RMS电桥输入电压(VRMS):70V最大直流阻断电压(VDC):100V最大平均正向整流输出电流(IF):2.0A峰值正向浪......
  • ASEMI肖特基二极管SS210L参数,SS210L规格,SS210L封装
    编辑-ZASEMI肖特基二极管SS210L参数:型号:SS210L最大重复峰值反向电压(VRRM):100V最大RMS电桥输入电压(VRMS):70V最大直流阻断电压(VDC):100V最大平均正向整流输出电流(IF):2.0A峰......
  • Java接收json参数
     Java接收json参数importjava.util.List;importjava.util.Map;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.anno......
  • .net 6 在异常过滤器中记录post参数 EnableBuffering
    在请求到达过滤器时Steam已经被读取了,此时我们在过滤器中使用EnableBuffering并没有起作用,还需要在中间件里使用EnableBuffering在.net6有一些稍微的不同1.在program......
  • springboot 请求参数 在swagger中 时间戳(Timestamp)被不断下拉展示
     在项目中,请求参数是Timestamp类型的在swagger显示如下: 对应的参数:@ApiModelProperty(value="查询时间-开始yyyy-MM-dd")privateTimestampstartDate;修改成:@A......
  • 拓端tecdat|R语言代写参数检验 :需要多少样本?如何选择样本数量
    参数检验受制于数据属性的假设。例如,学生t检验是众所周知的参数检验,假设样本均值具有正态分布。由于​​中心极限定理​​,如果样本量足够,测试也可以应用于非正态分布的测量......
  • Nacos2.1配置发布失败,请检查参数是否正确
    问题说明:chrome上配置新增配置文件,点击发布,报错“新增配置发布失败。请检查参数是否正确”解决方法:在nacosmysql数据库中分别在config_info、his_config_info表中新增......
  • SpirngBoot请求参数验证及@Validated使用方法
    分享知识传递快乐 SpirngBoot升级到2.3之后,hibernate-validator消失,需要手动依赖spring-boot-starter-validation<dependency><groupId>org.springframework.boot</g......
  • mybatis中${}、 #{}区别及应用场景
    mybatis中${}、#{}区别及应用场景动态sql是mybatis的主要特性之一。在mapper中定义的参数传到xml中之后,在查询之前mybatis会对其进行动态解析。mybatis提供了两种支持动态s......