C/C++中的可变参数
所需的函数参数不固定,需要用到带有可变参数的函数,类似printf();项目中需要打印信息等也会用到带可变参数的函数。
- C语言标准库的头文件 #include<stdarg.h>包含一组能够遍历可变长参数列表的宏,如下:
1 /*
2 va_list 用来定义一个指针变量,该指针变量表示参数列表中的各个参数;
3 */
4 va_list ap;
5
6 /*
7 初始化指针变量,ap指向函数参数列表中的第一个可选参数,v是第一个可选参数之前的固定参数
8 */
9 va_start(ap,v);
10
11 /*
12 返回参数列表中指针ap所指的参数,返回类型为type,并让ap指向参数列表的下一个参数
13 */
14 va_arg(ap,type);
15
16 /*
17 清空参数列表,并置指针无效
18 */
19 va_end(ap);
打印信息参考如下:
1 void addLog(const char* log, ...)
2 {
3 char chLog[8000];
4 va_list ap;
5 va_start(ap, log);
6 int ilength = vsprintf_s(chLog, log, ap);
7 chLog[ilength] = 0;
8 va_end(ap);
9
10 SYSTEMTIME st;
11 GetLocalTime(&st);
12 string szFile = "D:TestLog\\log.txt";
13 fstream fLog;
14 fLog.open(szFile.c_str(), ios::app | ios::in);
15 fLog << st.wYear << "-" << st.wMonth << "-" << st.wDay << " " << st.wHour
16 << ":" << st.wMinute << ":" << st.wSecond << " " << chLog << endl;
17
18 fLog.close();
21 }
使用:
const char* chLog = "WH WIN";
addLog("%s!", chLog);
参考:https://www.cnblogs.com/zhaobinyouth/p/8781915.html
C/C++中的可变参数的更多相关文章
- C# 中的可变参数方法(VarArgs)
首先需要明确一点:这里提到的可变参数方法,指的是具有 CallingConventions.VarArgs 调用约定的方法,而不是包含 params 参数的方法.可以通过MethodBase.Call ...
- Java中的可变参数以及foreach语句
Java中的可变参数的定义格式如下: 返回值类型 方法名称(类型 ... 参数名称){} foreach语句的格式如下: for ( 数据类型 变量名称 :数据名称){ ... } public ...
- 【转】C,C++中使用可变参数
可变参数即表示参数个数可以变化,可多可少,也表示参数的类型也可以变化,可以是 int,double还可以是char*,类,结构体等等.可变参数是实现printf(),sprintf()等函数的关键之处 ...
- 关于Retrofit网络请求URL中含有可变参数的处理
开题:在此默认各位看官对Retrofit.以及Okhttp已经有过一定的了解及应用,所以今天我们不谈基础入门的东西,今天我们谈在Retrofit请求接口管理类中URL参数含有动态参数的处理方式.一般我 ...
- [C++]C,C++中使用可变参数
可变参数即表示参数个数可以变化,可多可少,也表示参数的类型也可以变化,可以是int,double还可以是char*,类,结构体等等.可变参数是实现printf(),sprintf()等函数的关键之处, ...
- C语言中的可变参数-printf的实现原理
C语言中的可变参数-printf的实现原理 在C/C++中,对函数参数的扫描是从后向前的.C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出 ...
- Java中的可变参数
1.什么是可变参数 可变参数是JDK1.5的新特性,允许一个方式接受任意数量的参数 public static void main(String[] args) { print("a&quo ...
- [集合]java中的 可变参数
可变的参数类型,也称为不定参数类型.英文缩写是varargus,还原一下就是variable argument type.通过它的名字可以很直接地看出来,这个方法在接收参数的时候,个数是不定的. pu ...
- C函数和宏中的可变参数
一:调用惯例 函数的调用方和被调用方对函数如何调用应该有统一的理解,否则函数就无法正确调用.比如foo(int n, int m),调用方如果认为压栈顺序是m,n,而foo认为压栈顺序是n, m,那么 ...
- 【译】Java中的可变参数
译文链接 http://www.programcreek.com/2014/01/java-varargs-examples/ 什么是Java可变参数 可变参数是Java 1.5引入的一个特性,它允许 ...
随机推荐
- 【随笔记】T507 ADC SGM58031 16BIT 4Channel 调试记录
文章介绍 本文主要描述在 T507 Android 10 Linux 4.9 平台下,调试 SGM58031 芯片的记录,实现单芯片实时采集外部四通道的电压数值. 芯片介绍 SGM58031 是一款低 ...
- python自动发布-优化版本
import sys import time import os import paramiko from pygments.lexers import shell baseconfig = { &q ...
- pdf转图片加水印压缩
''' pip install pymupdf pip install pillow ''' import os import uuid import fitz from PIL import Ima ...
- C-07\字符串的输入输出及常用操作函数
一.算法优化: 减少分支优化 // 求绝对值 int MyAbs(int n) { if (n < 0) { n = ~n + 1; } return n; } // 优化 int MyAbs( ...
- Vue18 过滤器
1 简介 过滤器(filter)是输送介质管道上不可缺少的一种装置,大白话,就是把一些不必要的东西过滤掉,过滤器实质不改变原始数据,只是对数据进行加工处理后返回过滤后的数据再进行调用处理,我们也可以理 ...
- 【CodeSmith】The System.Data.SQLite library is not installed on this computer,不能使用SQLite解决办法
1.出现问题原因 1)System.Data.SQLite 尚未安装在您的计算机上 2)System.Data.SQLite 尚未正确配置 2.下载并安装System.Data.Sqlite [注意] ...
- Cesium计算多边形面积(十一)
//计算三角形面积 function triangleArea(p0, p1, p2) { let v0 = Cesium.Cartesian3.subtract(p0, p1, new Cesium ...
- WGCMS 奇迹网站系统 介绍[V2023.2.2]
智鹏网站系统,请勿用作非法用途 权利和义务: 程序仅限学习技术使用,未经官方许可不得用于商业! 程序售价500元一套,绑定域名,不限制端口.如绑定:xx.com,则www.xx.com.mu.xx.c ...
- CMT: Convolutional Neural Networks Meet Vision Transformers概述
0.前言 相关资料: arxiv github 论文解读(CSDN,CSDN) 论文基本信息: 作者单位:华为诺亚, 悉尼大学 发表时间:CVPR2022(2021.7.13) 1.针对的问题 当前将 ...
- MS-TCT: Multi-Scale Temporal ConvTransformer for Action Detection概述
1.针对的问题 为了在未修剪视频中建模时间关系,以前的多种方法使用一维时间卷积.然而,受核大小的限制,基于卷积的方法只能直接获取视频的局部信息,不能学习视频中时间距离较远的片段之间的直接关系.因此,这 ...