gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:18:32 25 4
gpt4 key购买 nike

如果执行以下代码,我会收到 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);
}

GCC 告诉我这个:

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 被转换为).

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

关于c - c中va_arg函数中的变量参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com