今天用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
相关推荐
在C语言中,合成字符串通常涉及使用`printf`系列函数,但这些函数并不直接支持动态地根据可变参数创建字符串。然而,通过使用`stdarg.h`库中的宏和函数,我们可以实现这样的功能。本篇文章将深入讲解如何用C语言根据...
可变报头包括了报文标识符(Packet Identifier)字段,用于对应SUBSCRIBE报文中的标识符,以及一系列的QoS级别响应,表示服务器对每个订阅主题同意提供的服务质量。 【3】MQTT协议的实现与C语言封装 在C语言中封装...
综上所述,虽然C语言本身不支持面向对象的语法,但通过结构体、函数指针、静态和外部声明等技术手段的运用,可以在C语言中实现类似面向对象的封装特性,从而提高嵌入式软件开发的效率和质量。这项研究不仅丰富了...
本项目探讨的是如何在C语言中采用面向方法的思想实现可变长度数组,并将其封装为动态链接库(liblist.so)。这允许程序员在运行时根据需求动态地改变数组的大小,提供更高的灵活性。 首先,`list.h`头文件是接口...
标题中的“自己写的C语言数组处理函数,简单封装”就是这样的一个实践,它通过自定义的函数,实现了可变长数组的功能,使得在指定范围内动态管理数组变得可能。 首先,我们来看`datatool.c`文件,这很可能是包含...
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句...
函数在C语言中扮演着核心角色,它们是组织代码的基本单元,允许我们封装功能并进行复用。C语言的函数可以接受参数,返回值,并且可以相互调用。此外,C语言还支持预定义的库函数,如标准输入输出函数(printf、scanf...
C语言是一种通用的、过程式的编程语言,它的语法严谨且高效,使得编写复杂控制逻辑变得更加直观和简洁。 C语言在PLC中的应用主要体现在功能块(FB)的编写上。功能块是一种可以重复使用的代码模块,它封装了一组...
C语言头文件是编程时必不可少的部分,它们包含了各种预定义的函数、宏和类型定义,使得程序员能够方便地调用操作系统或标准库的功能。在这个“C语言头文件大全(语法着色版)”中,我们可以看到一些常见的头文件及其...
- 通过`stdarg.h`库中的`va_list`, `va_start`, `va_arg`, 和 `va_end`宏,可以创建接受可变数量参数的函数,如`printf`函数。 7. **结构体参数**: - 结构体作为参数允许一次传递多个数据,便于处理复杂的数据...
其次,C#支持可变参数(varargs)和参数数组,这使得传递不定数量的参数成为可能。但是,由于七参数转换是一个具体的概念,通常不会用到这种特性,因为它已经明确了参数的数量。 七参数转换可能涉及的常见情况包括...
va_arg宏用于遍历可变参数列表,并根据提供的类型返回参数的值。每次调用va_arg时,都会更新va_list变量的值,以指向下一个参数。最后,va_end宏用于清理赋予va_list变量的资源,以避免潜在的内存泄漏问题。在使用va...
在C语言中,函数是一种非常重要的概念,它允许我们将代码组织成模块化的、可重用的块。通过函数,我们可以实现代码的封装,使得程序更加清晰、易于维护。 ##### 1.1 函数的定义 函数是一个被命名的、独立的代码段,...
4. **结构体与联合体**:C语言中的复合数据类型,用于封装不同类型的数据,手册会讲解如何定义、初始化和操作结构体与联合体。 5. **函数**:C语言中的函数定义、声明、调用、参数传递以及递归函数的使用。 6. **...
最后,C语言的标准化过程,即ANSI C和C99、C11等版本,引入了一些新的特性,如inline函数、变长参数列表、_Bool类型、复杂类型等,这些扩展了C语言的功能,使其更加现代化。 "非常经典而详细的C语言课件"应该包含了...
在C语言中,可以使用函数指针作为参数来实现多态。例如,在命令解析器的例子中,可以定义一组处理不同命令的函数指针数组,并通过统一的接口来调用这些函数,从而达到多态的效果。 ### 二、C语言实现封装的实践 ##...
常量则是不可变的值。在C语言中,可以使用`#define`预处理器指令定义宏常量,或者使用`const`关键字声明常量。 3. 运算符与表达式:C语言支持多种运算符,如算术运算符(+、-、*、/、%)、关系运算符(==、!=、<、>...
3. 核函数选择:如线性核、多项式核、高斯核(RBF)等,用于将低维空间中的非线性可分问题转换到高维空间变得线性可分。 4. 拉格朗日乘子法:通过求解拉格朗日函数的极值来确定最优超平面。 5. 决策函数:训练完成后...
在软件开发过程中,良好的编程规范对于提高代码质量、增强可维护性以及促进团队协作具有重要意义。特别是在C语言这样的底层编程语言中,合理的编程规范能够有效地避免很多常见的错误,并使得程序更加健壮。本文将...
1. 变参函数:变参函数是指可以接受可变数量参数的函数。 2. 函数指针:函数指针是指指向函数的指针,可以用于回调函数和高阶函数。 3. 泛型算法:泛型算法是指可以应用于多种数据类型的算法。 4. 复杂链表的链表...