gpt4 book ai didi

c - 可变函数参数的自动类型提升是什么?

转载 作者:太空狗 更新时间:2023-10-29 15:20:34 24 4
gpt4 key购买 nike

考虑以下代码片段:

#include <stdio.h>
#include <stdarg.h>

void display(int num, ...) {
char c;
int j;
va_list ptr;
va_start(ptr,num);
for (j= 1; j <= num; j++){
c = va_arg(ptr, char);
printf("%c", c);

}
va_end(ptr);
}

int main() {
display(4, 'A', 'a', 'b', 'c');
return 0;
}

程序给出运行时错误,因为 vararg 自动将 char 提升为 int,在这种情况下我应该使用 int。

当我使用 vararg 时允许使用哪些类型,如何知道使用哪种类型并避免此类运行时错误。

最佳答案

另一种其他人忘记提及的情况是指针类型,关键是NULL。由于这可能扩展为 0(void*)0 (或其他一些奇怪的东西),您将不知道编译器是否将 int或列表中的 void*。由于它们可以有不同的宽度,这可能会导致恼人的错误。

关于c - 可变函数参数的自动类型提升是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7084857/

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