c中va_arg函数中的变量参数类型
发布时间:2020-12-16 03:15:37 所属栏目:百科 来源:网络整理
导读:我正在通过 gcc编译器收到警告,如果执行以下代码,程序将中止我无法理解为什么?如果有人澄清它会很有帮助. #includestdio.h#includestdarg.hint 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
我正在通过
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("%cn",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). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |