`

C语言中的可变参数封装

 
阅读更多

今天用C写个小程序,调试过程用printf输出下变量(测试程序也就没用log框架);输出多了没有日期也没有换行很难看,第一想法是包装一层,把参数传进来,然后再传递给printf。

 

编码的时候才发现,printf接收的是可变参数,定义可变参数的函数没问题,可是怎么传递?居然卡住了......

VS自动生成的main函数是这样的:int _tmain(int argc, _TCHAR* argv[]),看着眼熟试了一下还是行不通。只好上搜索,搜到的结果如下。

 

 

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

void log(const char *cmd, ...)
{
   printf("%s %s ", __DATE__, __TIME__);
   va_list args;       //定义一个va_list类型的变量,用来储存单个参数
   va_start(args,cmd); //使args指向可变参数的第一个参数
   vprintf(cmd,args);  //必须用vprintf等带V的
   va_end(args);       //结束可变参数的获取
   printf("\n");       //输出换行
}

 

参考链接:

https://www.cnblogs.com/ThatsMyTiger/p/6924462.html

http://www.cnblogs.com/cpoint/p/3368993.html

https://bbs.csdn.net/topics/90162956

https://www.cnblogs.com/edver/p/8419807.html

https://www.tutorialspoint.com/cprogramming/c_variable_arguments.htm

https://www.cprogramming.com/tutorial/c/lesson17.html

分享到:
评论

相关推荐

    用c语言根据可变参数合成字符串的实现代码

    在C语言中,合成字符串通常涉及使用`printf`系列函数,但这些函数并不直接支持动态地根据可变参数创建字符串。然而,通过使用`stdarg.h`库中的宏和函数,我们可以实现这样的功能。本篇文章将深入讲解如何用C语言根据...

    C语言代码封装MQTT协议报文,了解MQTT协议通信过程.pdf

    可变报头包括了报文标识符(Packet Identifier)字段,用于对应SUBSCRIBE报文中的标识符,以及一系列的QoS级别响应,表示服务器对每个订阅主题同意提供的服务质量。 【3】MQTT协议的实现与C语言封装 在C语言中封装...

    用C语言实现类封装的研究.pdf

    综上所述,虽然C语言本身不支持面向对象的语法,但通过结构体、函数指针、静态和外部声明等技术手段的运用,可以在C语言中实现类似面向对象的封装特性,从而提高嵌入式软件开发的效率和质量。这项研究不仅丰富了...

    C语言面向方法思想的可变长度数组的动态库

    本项目探讨的是如何在C语言中采用面向方法的思想实现可变长度数组,并将其封装为动态链接库(liblist.so)。这允许程序员在运行时根据需求动态地改变数组的大小,提供更高的灵活性。 首先,`list.h`头文件是接口...

    自己写的C语言数组处理函数,简单封装

    标题中的“自己写的C语言数组处理函数,简单封装”就是这样的一个实践,它通过自定义的函数,实现了可变长数组的功能,使得在指定范围内动态管理数组变得可能。 首先,我们来看`datatool.c`文件,这很可能是包含...

    C语言版学生管理系统 - 基于文件实现可变长信息存储.zip

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句...

    C语言900例,C语言900例

    函数在C语言中扮演着核心角色,它们是组织代码的基本单元,允许我们封装功能并进行复用。C语言的函数可以接受参数,返回值,并且可以相互调用。此外,C语言还支持预定义的库函数,如标准输入输出函数(printf、scanf...

    信捷 XC系列PLC应用之C语言编辑功能块例程.rar

    C语言是一种通用的、过程式的编程语言,它的语法严谨且高效,使得编写复杂控制逻辑变得更加直观和简洁。 C语言在PLC中的应用主要体现在功能块(FB)的编写上。功能块是一种可以重复使用的代码模块,它封装了一组...

    c语言头文件大全(语法着色版)

    C语言头文件是编程时必不可少的部分,它们包含了各种预定义的函数、宏和类型定义,使得程序员能够方便地调用操作系统或标准库的功能。在这个“C语言头文件大全(语法着色版)”中,我们可以看到一些常见的头文件及其...

    c语言中函数调用的几个实例

    - 通过`stdarg.h`库中的`va_list`, `va_start`, `va_arg`, 和 `va_end`宏,可以创建接受可变数量参数的函数,如`printf`函数。 7. **结构体参数**: - 结构体作为参数允许一次传递多个数据,便于处理复杂的数据...

    C#七参数转换代码

    其次,C#支持可变参数(varargs)和参数数组,这使得传递不定数量的参数成为可能。但是,由于七参数转换是一个具体的概念,通常不会用到这种特性,因为它已经明确了参数的数量。 七参数转换可能涉及的常见情况包括...

    C语言函数的一种特殊调用方法.pdf

    va_arg宏用于遍历可变参数列表,并根据提供的类型返回参数的值。每次调用va_arg时,都会更新va_list变量的值,以指向下一个参数。最后,va_end宏用于清理赋予va_list变量的资源,以避免潜在的内存泄漏问题。在使用va...

    c语言第5讲使用函数封装代码-PPT.ppt

    在C语言中,函数是一种非常重要的概念,它允许我们将代码组织成模块化的、可重用的块。通过函数,我们可以实现代码的封装,使得程序更加清晰、易于维护。 ##### 1.1 函数的定义 函数是一个被命名的、独立的代码段,...

    c语言技术手册 chm

    4. **结构体与联合体**:C语言中的复合数据类型,用于封装不同类型的数据,手册会讲解如何定义、初始化和操作结构体与联合体。 5. **函数**:C语言中的函数定义、声明、调用、参数传递以及递归函数的使用。 6. **...

    非常经典而详细的C语言课件

    最后,C语言的标准化过程,即ANSI C和C99、C11等版本,引入了一些新的特性,如inline函数、变长参数列表、_Bool类型、复杂类型等,这些扩展了C语言的功能,使其更加现代化。 "非常经典而详细的C语言课件"应该包含了...

    C语言面向对象(针对较大型软件).pdf

    在C语言中,可以使用函数指针作为参数来实现多态。例如,在命令解析器的例子中,可以定义一组处理不同命令的函数指针数组,并通过统一的接口来调用这些函数,从而达到多态的效果。 ### 二、C语言实现封装的实践 ##...

    C语言源文件

    常量则是不可变的值。在C语言中,可以使用`#define`预处理器指令定义宏常量,或者使用`const`关键字声明常量。 3. 运算符与表达式:C语言支持多种运算符,如算术运算符(+、-、*、/、%)、关系运算符(==、!=、&lt;、&gt;...

    c语言写的svm程序

    3. 核函数选择:如线性核、多项式核、高斯核(RBF)等,用于将低维空间中的非线性可分问题转换到高维空间变得线性可分。 4. 拉格朗日乘子法:通过求解拉格朗日函数的极值来确定最优超平面。 5. 决策函数:训练完成后...

    c语言编程规范 C语言模块化

    在软件开发过程中,良好的编程规范对于提高代码质量、增强可维护性以及促进团队协作具有重要意义。特别是在C语言这样的底层编程语言中,合理的编程规范能够有效地避免很多常见的错误,并使得程序更加健壮。本文将...

    C语言实训项目-查字典

    1. 变参函数:变参函数是指可以接受可变数量参数的函数。 2. 函数指针:函数指针是指指向函数的指针,可以用于回调函数和高阶函数。 3. 泛型算法:泛型算法是指可以应用于多种数据类型的算法。 4. 复杂链表的链表...

Global site tag (gtag.js) - Google Analytics