va_arg读取类型不匹配

Posted MushRain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了va_arg读取类型不匹配相关的知识,希望对你有一定的参考价值。

va_arg读取类型不匹配

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

double average(int num, ...) {
    va_list valist;
    // 定义函数额外参数序列
    double sum = 0.0;
    int i;

    // 为num个参数初始化
    va_start(valist, num);
	
    for (i = 0; i < num; i ++) {
        sum += va_arg(valist, double);
    }
    // 根据类型获取数字
    va_end(valist);

    // 释放内存
    return sum / num;
}

int main() {
    printf("Average of numbers is %340f\\n", average(1, 1));
    return 0;
}
Average of numbers is 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049406564584124654

va_arg(va, type)是按照type类型的格式去读取va当前指向的数据,而且是强制性(底层数据)的。

如上,我把1(int)类型的数据强制读成double结果输出的值是下面的这个值。

可见,这里绝不是什么自动类型提升,一定注意,不同类型的数据一定使用对应的格式去读取

以上是关于va_arg读取类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章

从 Apollo 缓存中读取特定类型的所有片段

ftl 模板中的 escapeHtml="false" 引发参数类型不匹配

在片段中创建自定义列表视图时出错所需活动,找到片段

在片段中创建自定义列表视图时出错。必需的活动,找到的片段

找出可变参数宏中__VA_ARGS__的类型

错误:类型不匹配:推断类型为单位,但应为布尔值