繁体   English   中英

c中va_arg函数中的变量参数类型

[英]variable argument type in va_arg function in c

我正在通过gcc编译器收到警告,如果执行以下代码,程序将中止我无法理解为什么? 如果有人澄清它会很有帮助。

#include<stdio.h>
#include<stdarg.h>
int f(char c,...);
int main()
{
   char c=97,d=98;
   f(c,d);
   return 0;
}

int f(char c,...)
{
   va_list li;
   va_start(li,c);
   char d=va_arg(li,char); 
   printf("%c\n",d);
   va_end(li);
}

海湾合作委员会告诉我:

warning: 'char’ is promoted to ‘int’ when passed through ‘...’ [enabled by default]
note: (so you should pass ‘int’ not ‘char’ to ‘va_arg’)
note: if this code is reached, the program will abort

可变参数函数的参数经过默认参数提升 ; 小于int任何东西(例如char )首先转换为int (并将float转换为double )。

所以va_arg(li,char)永远不正确; 请改用va_arg(li,int)

是的,这似乎是C标准的怪癖。 但是,看起来这只与va_arg()

您可以查看printf()各种实现,以了解如何克服这一点。 例如, klibc中的那个很容易阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM