1、问题

编译可变参数函数里面有va_arg函数的时候提示这个错误
expanded from macro 'va_arg'  #define va_arg(ap, type) 
 

2、原因

我没有考虑“默认参数提升”问题
如果一个函数的形参类型未知, 例如使用了Old Style C风格的函数声明,或者函数的参数列表中有 ...,那么调用函数时要对相应的实参做Integer Promotion,此外,相应的实参如果是float型的也要被提升为double类型, char 要提升为int类型,这条规则称为Default Argument Promotion。
我的代码是这样写的
va_arg(arg, float)

3、如何修改代码

va_arg(arg, double)

4、总结

默认实际参数提升场景:
一般是可变参数列表,第一个参数有类型,后面的可变参数没类型,后面所有的可变参数就会有 默认参数提升的场景
 

C和指针之实现可变参数函数编译出现expanded from macro ‘va_arg‘ #define va_arg(ap, type) 解决办法相关推荐

  1. 关于C语言可变参数函数的一些研究和总结

    可变参数函数是指函数参数的个数.类型等是不固定的,需要在用户调用过程中,根据实际传入的参数来确定其类型.个数等信息.例如:可变参数函数printf可谓是在C开发过程中使用最多的标准输出库函数之一,因此 ...

  2. 揭密X86架构C可变参数函数实现原理

    前两天公司论坛有同事在问C语言可变参数函数中的va_start,va_arg 和 va_end 这些接口怎么实现的?我毫不犹豫翻开箱底,将多年前前(算算有十年了)写的文章「亲密接触C可变参数函数」发给 ...

  3. c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理

    在本人的<C语言可变参数函数的实现方法>一文中,介绍了如何建立自己的可变参数函数. 下面继续介绍可变参数函数的实现原理. 在汇编语言程序设计中,详细介绍了子程序的实现思想: (1)子程序只 ...

  4. 解析可变参数函数的实现原理(printf,scanf)

    From: http://hi.baidu.com/huifeng00/blog/item/085e8bd198f46ed3a8ec9a0b.html 学习C的语言的时候,肯定接触到标准输出和标准输入 ...

  5. mysql不定参数函数_可变参数函数(一)

    一个函数可以接受不定数的参数个数,这就是可变参数函数,比较常见的比如printf(),scanf(): printf(const char*format,-); printf("%d&quo ...

  6. printf 函数使用 可变参数函数实现原理

    一. Printf 和scanf 函数格式 Printf 和 scanf 家族函数都属于可变参数函数(variadic function).这种函数需要固定数量的强制参数,后面是数量可变的可选参数. ...

  7. C语言可变参数函数_初探

    一.什么是可变参数函数 C语言允许定义参数数量可变的函数,这称为可变参数函数(variadic function).这种函数需要固定数量的强制参数,后面是数量可变的可选参数. 其中,强制参数必须至少一 ...

  8. c语言中函数名可变,C语言中可变参数函数

    转帖两封: 首先在介绍可变参数表函数的设计之前,我们先来介绍一下最经典的可变参数表printf函数的实现原理. 一.printf函数的实现原理 在C/C++中,对函数参数的扫描是从后向前的.C/C++ ...

  9. C语言 可变参数函数 tcy

    可变参数函数 1.1.格式:int add(int n, ...) 1.2.参数:n:强制参数(必须至少一个)...:可选参数类型可变化 2.stdarg.h : void va_start( va_ ...

最新文章

  1. 利用python把成绩用雷达图表示出来
  2. MIT喊你来上课,深度学习课程,免费的那种 | 资源
  3. django-url的分发, 2)起别名, 3)根目录,4)rediect跳转函数:
  4. Mocha and Hiking 模拟
  5. kafka的四种checkpoint(没有整理完)
  6. google提供的adb工具包_开源化学信息学工具包(Open Access Cheminformatics Toolkits)
  7. POJ1821-Fence【单调队列,dp】
  8. arch linux简体中文,User-mode Linux (简体中文)
  9. Matlab--存储和加载.mat文件形式的数据
  10. 运行HelloJersey遇到异常解决方法
  11. [贪心][模拟] Jzoj P5811 简单的填数
  12. 15条经典实用的网站优化技巧
  13. 单片机c语言带参数子函数,单片机C语言教程:C51函数
  14. 李珣动态爱心代码教程
  15. 太实用了,这几个Python数据可视化案例
  16. 服务器网站监控报表,宝塔面板网站监控报表实时分析网站日志
  17. 利用python修改小米运动数据,整个朋友圈都感觉太夸张了
  18. 目标检测之单阶段和两阶段检测算法的对比
  19. js汉语转拼音(全拼、首字母、拼音首字母)
  20. 生物信息学算法之Python实现|Rosalind刷题笔记:003 中心法则:翻译

热门文章

  1. 从 ThreadLocal 到 AsyncLocal
  2. 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序
  3. 面向.NET开发人员的Dapr——目录
  4. WPF 修改(优化)Menu菜单的样式
  5. Prism for WPF 搭建一个简单的模块化开发框架
  6. 跟我一起学.NetCore之Swagger让前后端不再烦恼及界面自定义
  7. 实现一个基于动态代理的 AOP
  8. Kubernetes 与 Helm:使用同一个 Chart 部署多个应用
  9. Redis 6 RC1发布,带来众多新特性
  10. 从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置