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

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、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有没有一段代码,让你觉得人类的智慧也可以璀璨无比?【转】

转自:https://www.zhihu.com/question/30262900 作者:烧茄子链接:https://www.zhihu.com/question/30262900/answer/48741026来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。当然是这个…

maven中pom.xml中的scope讲解

一、compile:编译范围compile是默认的范围;如果没有提供一个范围,编译范围依赖在所有的classpath 中可用,同时它们也会被打包。而且这些dependency会传递到依赖的项目中。 二、provided:已提供范围provided 明了depend…

C和指针之函数之实现简单的printf函数(支持%d, %f, %c, %s)

1、问题 *简化printf函数,能够处理%d, %f, %c, %s格式码,假设已经存在 *print_integer和print_float函数,另外2个类型用put char来打印 思路: void va_start(va_list ap, last);// 取第一个可变参数的指针给ap,// last是函数声明中的最后一个固定参数(比如printf函数原型…

python 面试宝典--集各家之所长,乱七八糟于一体

1. 在判断object是否是class的instances时&#xff0c;type和isinstance函数的区别&#xff1f; type(obj) > <type instance> type(cls) > <type classobj> 由上可知&#xff0c;所有obj type后统一为 instance type&#xff1b; 而cls type后统一为classob…

如何使用 abp 创建 module 并应用单独的数据库迁移

最近在学习使用 abp 来做一些小程序。abp 是一个功能丰富的 .NET 开发框架&#xff0c;完全开源&#xff0c;遵循 DDD&#xff08;领域驱动&#xff09;设计模式&#xff0c;支持微服务开发&#xff0c;集成了 Identity、角色权限、本地化、动态代理、后台任务、分布式消息、审…

MinGW安装和使用基础教程

MinGW全称Minimalist GNU For Windows&#xff0c;是个精简的Windows平台C/C、ADA及Fortran编译器&#xff0c;相比Cygwin而言&#xff0c;体积要小很多&#xff0c;使用较为方便。MinGW提供了一套完整的开源编译工具集&#xff0c;以适合Windows平台应用开发&#xff0c;且不依…

px,em,rem,vw单位在网页和移动端的应用

px&#xff1a; 是网页设计中最常用的单位&#xff0c;然而1px到底是多大长&#xff0c;恐怕没有人能回答上来 它用来表示屏幕设备物理上能显示的最小的一个点&#xff0c;这个点不是固定宽度的&#xff0c;不同设备上点的长度、比例有可能会不同。 假设&#xff1a;你现在用的…

C和指针之函数递归实现把amount表示的值转换为单词形式written_amount(unsigned int amount,char *buffer)

1、题目 编写函数 void written_amount(unsigned int amount,char *buffer); 它把amount表示的值转换为单词形式,并储存于buffer中。这个函数可以在一个打印支票的程序中使用。例如,如果amount的值是16312,那么buffer中存储的字符串应该是 SIXTEEN THOUSAND THREE HUNDR…

cs-Panination

ylbtech-Unitity: cs-PaninationPager.cs IPagingOption.cs IPagedList.cs PagingOption.cs PagedList.cs PagingExtensions.cs 1.A,效果图返回顶部 1.B,源代码返回顶部1.B.1,Pager.cs using System; using System.Collections.Generic; using System.Linq; using System.Text…

SignalR的使用

什么是 SignalR&#xff1f;ASP.NET Core SignalR 是一个开放源代码库&#xff0c;可用于简化向应用添加实时 Web 功能。实时 Web 功能使服务器端代码能够将内容推送到客户端。适合 SignalR 的候选项&#xff1a;需要从服务器进行高频率更新的应用。示例包括游戏、社交网络、投…

NHibernate之旅(7):初探NHibernate中的并发控制

本节内容 什么是并发控制&#xff1f; 悲观并发控制(Pessimistic Concurrency)乐观并发控制(Optimistic Concurrency)NHibernate支持乐观并发控制实例分析结语什么是并发控制&#xff1f; 当很多人试图同一时候改动数据库中的数据时&#xff0c;必须实现一个控制系统&#xff0…

C和指针之数组名和数组名和首元素以及sizeof(数组名)和sizeof(数组名作为参数)区别

1、先看我的测试Demo #include <stdio.h> #include <stdlib.h>int get_size(int *p) {int size = sizeof(p);return size; }int main() {int a[6] = {1, 2, 3, 4, 5, 6};int b[] = {1, 2, 3, 4, 5, 6};int c[10] = {1, 2, 3, 4, 5, 6};int size_a = sizeof(a);int …

html常用标签(form标签)

一、form标签 form标签是html标签中非常重要的一个标签。常用于注册、登录页面的使用。 <form action"提交地址" method"提交方式"> </form> 注&#xff1a;method的值有两个。get&#xff08;默认值&#xff09;和post。get数据安全性没有pos…

期望DP

期望DP的一般做法是从末状态開始递推&#xff1a; Problem DescriptionAkemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl).Homura wants to help her friend Madoka save the world. But because of the plot of the Boss Incubator, she is trapped in a labyrinth …

神奇的[Caller*]属性

前言上次&#xff0c;我们《使用 CallerArgumentExpression 检查弃元参数》&#xff0c;它实际是利用编译器编译时将变量名称传入。其实&#xff0c;.NET中提供了多个[Caller*]属性&#xff0c;帮助我们轻松获取调用者信息。CallerFilePathAttribute允许获取包含调用方的源文件…

eshop截取字符串长度 和去掉省略号

<!-- {if $goods.goods_brief} --> {$goods.goods_brief|truncate:17}<!-- {/if} --> 去掉省略号&#xff1a; 找到includes/lib_base.php 第63行 $newstr . ... 去掉... 即可转载于:https://www.cnblogs.com/wesky/p/4819319.html

C和指针之字符串之实现strcpy函数

1、问题 实现strcpy函数2、代码实现 #include <stdio.h> #include <assert.h> char *str_copy(char *des, const char *src) {assert(src ! NULL);assert(des ! NULL);while ((*des *src) ! \0);return des; } int main() {const char *src "chenyu";c…

java dateTime + long

2019独角兽企业重金招聘Python工程师标准>>> public static void main(String[] args) throws Exception{SimpleDateFormat sdfnew SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // long timeStartsdf.parse("2011-09-20 12:30:45").getTime();l…

IOS 开发环境,证书和授权文件是什么?

一、成员介绍 1. Certification(证书) 证书是对电脑开发资格的认证&#xff0c;每个开发者帐号有一套&#xff0c;分为两种&#xff1a; 1) Developer Certification(开发证书) 安装在电脑上提供权限&#xff1a;开发人员通过设备进行真机测试。 可以生成副本供多台电脑安…

.NET Core中异常过滤器ExceptionFilter的使用介绍

介绍实现需要继承IExceptionFilter 或 IAsyncExceptionFilter。可用于实现常见的错误处理策略。使用场景首先讲一下我们为什么要使用异常过滤器 &#xff0c;如果业务场景复杂&#xff0c;只使用HttpStatusCode&#xff0c;抛出异常后,后期要加很多字段来描述。那么这种就比较不…