va_arg(ap,unsigned int),参数为“ signed int”,反之亦然

时间:2019-07-01 21:46:37

标签: c language-lawyer

我注意到C标准的7.16.1.1p2确实允许使用与实际可变参数类型不兼容的类型来访问可变参数,只要通过va_arg给出的类型与相应的实际参数不同即可。可变参数类型仅在有符号的情况下...:

  

...除以下情况外,行为是不确定的:

     
      
  • 一种类型是有符号整数类型,另一种类型是相应的   无符号整数类型,并且该值在两种类型中均可表示;
  •   
  • 一种类型是指向void的指针,另一种是指向字符的指针   类型。
  •   

在两种类型中都是可表示的

最后一个要求与通过指针访问的严格别名规则形成对比。该规则允许通过指针访问对象,该指针的目标类型与对象的有效类型仅在签署上有所不同,并且该规则无需对目标对象的值施加任何要求:

6.5p7

  

一个对象的存储值只能由左值访问   表达式具有以下类型之一:88)

     
      
  • ...
  •   
  • type是与之对应的有符号或无符号类型   对象的有效类型,
  •   
  • ...
  •   

这种差异的依据是什么?为什么不同签名的va_arg访问和不不同签名的指针访问都应该关心可表示的值?

0 个答案:

没有答案