C语言 va_start 宏 - C语言零基础入门教程

目录

  • 一.前言
  • 二.va_start 简介
  • 三.va_start 使用
  • 四.猜你喜欢

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.前言

printf 函数的使用,我们并不陌生,首先我们来看看下面关于 printf 函数的几种调用方式:

printf("hello world");
printf("%s","hello world");
printf("%s %s","hello world","C语言教程-猿说编程");
printf("%d",3);
printf("%d %d",3,6);
printf("%d %d %d ",1,2,3);

那么 printf 函数的原理到底是什么?

由于在 C 语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦,即使采用 `C++ ,如果参数个数不能确定,也很难采用函数重载。对这种情况,提出了指针参数来解决问题。

C 编译器通常提供了一系列处理这种情况的宏,以屏蔽不同的硬件平台造成的差异,增加程序的可移植性。这些宏包括 va_startva_argva_end 等,一般三者需要配套使用。

#include <stdarg.h>#define va_start __crt_va_start
#define va_arg   __crt_va_arg
#define va_end   __crt_va_end

二.va_start 简介

va_start 函数声明如下:

#include <stdarg.h>//必须包含头文件/*
*   arg_ptr 指向函数参数列表中的第一个可选参数
*   argN  是位于第一个可选参数之前的固定参数, 或者说最后一个固定参数
*/
va_start(arg_ptr, argN)

例如有如下函数声明:

void va_test(char a, char b, char c, …)

va_test 是一个不定长参数的函数,则它的固定参数依次是 a , b , c , arg_ptr 指向第一个参数 a ,最后一个固定参数 argNc ;

三.va_start 使用

va_start 和 va_end 一般需要配套使用,示例如下:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 va_start 宏
//@Time:2021/07/10 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/#include "stdafx.h"
#include <stdio.h>
#include <stdarg.h>void myPtintf(char *format, ...)
{va_list args;va_start(args, format);vprintf(format, args);va_end(args);
}int main()
{myPtintf("hello world\n");myPtintf("%s\n", "hello world");myPtintf("%s %s\n", "hello world", "C语言教程-猿说编程");myPtintf("%d\n", 3);myPtintf("%d %d\n", 3, 6);myPtintf("%d %d %d \n", 1, 2, 3);printf("");return(0);
}输出:
hello world
hello world
hello world C语言教程-猿说编程
3
3 6
1 2 3
*/

注意:在自定义 printf 函数 myPtintf 中,我们使用的是 vprintf 函数而非 printf 函数,注意 vprintf 函数和 printf 函数区别

四.猜你喜欢

  1. C 语言 数组下标越界和内存溢出区别
  2. C 语言 使用指针遍历数组
  3. C 语言 指针和数组区别
  4. C 语言 指针数组和数组指针区别
  5. C 语言 野指针
  6. C 语言 函数值传递和址传递
  7. C 语言 函数不定长参数
  8. C 语言 函数指针
  9. C 语言 指针函数
  10. C 语言 回调函数 callback
  11. C 语言 #pragma once
  12. C 语言 #include <> 与 #include “” 区别
  13. C 语言 const 修饰函数参数
  14. C 语言 const 和 define 区别
  15. C 语言 #运算符
  16. C 语言 ##运算符
  17. C 语言 __VA_ARGS__
  18. C 语言 ##__VA_ARGS__
  19. C 语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C 语言 va_start 宏

未经允许不得转载:猿说编程 » C 语言 va_start 宏

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

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

相关文章

使用Kubernetes和Docker将Spring Boot与MongoDB作为容器部署

戳蓝字“CSDN云计算”关注我们哦&#xff01;对于本教程&#xff0c;您将拥有一个Docker化Spring-Boot实例程序&#xff0c;该应用程序与MongoDB通信以获取GET/POST API请求&#xff0c;并部署在Kubernetes集群中。前提条件MinikubeKubectlDockerMavenDocker是一个具有"社…

C语言 va_end 宏 - C语言零基础入门教程

目录 一.前言二.va_end 简介三.va_end 使用四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.前言 对 printf 函数的使用&#xff0c;我们并不陌生&#xff0c;首先我们来看看下面关于 printf 函数的几种调用方式&#xff1a; printf("…

5种数据分析常用的思维方法!

戳蓝字“CSDN云计算”关注我们哦&#xff01;转自&#xff1a;中国统计网来源&#xff1a;网络大数据在数据分析中&#xff0c;数据分析思维是框架式的指引&#xff0c;实际分析问题时还是需要很多“技巧工具”的。就好比中学里你要解一元二次方式&#xff0c;可以用公式法、配…

多线程总结

package com.wuming.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask;//多线程总结 public class ThreadNew {public static void main(String[] args) {new MyThread1().start();new…

C语言 va_arg 宏 - C语言零基础入门教程

目录 一.前言二.va_arg 简介三.va_arg 使用四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.前言 对 printf 函数的使用&#xff0c;我们并不陌生&#xff0c;首先我们来看看下面关于 printf 函数的几种调用方式&#xff1a; printf("…

分布式系统与消息投递

戳蓝字“CSDN云计算”关注我们哦&#xff01;原文&#xff1a;https://draveness.me/message-delivery消息是一个非常有趣的概念&#xff0c;它是由来源发出一个离散的通信单元&#xff0c;被发送给一个或者一群接受者&#xff0c;无论是单体服务还是分布式系统中都有消息的概念…

什么是计算机网络

1.打电话&#xff1a;连接 TCP 2.发短信&#xff1a;发就完了 UDP 计算机网络&#xff1a;地理位置不同的多台计算机及外部设备&#xff0c;通过线路连接&#xff0c;在网络操作系统、网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系…

C语言 vprintf 函数 - C语言零基础入门教程

目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 int printf…

“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;稻农来源&#xff1a;阿里系统软件技术稻农&#xff08;叶磊&#xff09;阿里云智能事业群高级技术专家参与主导容器运行时及网络创新工作&#xff1b;目前的工作侧重于基于进程虚拟化的研究及增强&#xff08;网络…

C语言 main 函数参数 main(int argc, char *argv[]) - C语言零基础入门教程

目录 一.main 函数写法二.main 函数参数简介三.使用 main 函数参数 1.打印 main 函数参数 a.直接运行 exe 文件b.打开 cmd 命令行窗口执行 exe 文件c.打开 cmd 命令行窗口执行 exe 文件并设置 main 函数参数 2.使用 main 函数参数 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C …

网络通信的两个要素

如何实现网络通信&#xff1f; 通信双方地址&#xff1a; ip 端口号 192.168.16.124:5900 规则&#xff1a;网络通信的协议 TCP/IP参考模型&#xff1a; 小结&#xff1a; 1.网络编程两个主要问题&#xff1a; 定位一台或多台主机 找到主机如何通信 2.网络编程要素 …

讲讲亿级PV的负载均衡架构!

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源&#xff1a;孤独烟引言本来没想写这个题材的&#xff0c;为了某某童鞋能够更好的茁壮成长&#xff0c;临时写一篇负载均衡的。负载均衡&#xff0c;大家可能听过什么3层负载均衡、4层负载均衡、7层负载均衡什么的&#xff1f;那…

C语言 vprintf 函数和 printf 函数区别 - C语言零基础入门教程

目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 int printf…

ip地址讲解啊

ip地址 ip地址&#xff1a;inetaddress 唯一定位一台网络上计算机 127.0.0.1&#xff1a;本机localhost C:\Users\admin>ping 127.0.0.1 正在 Ping 127.0.0.1 具有 32 字节的数据: 来自 127.0.0.1 的回复: 字节32 时间<1ms TTL128 来自 127.0.0.1 的回复: 字节32 时间&…

端口之讲解

端口表示计算机上的一个程序的进程 不同进程有不同的端口号&#xff0c;用来区分软件 被规定0~65535 TCP,UDP&#xff1a;65535*2 tcp:80,udp:80吗&#xff0c;单个协议下&#xff0c;端口号不能冲突 端口分类 公有端口0~1023 HTTP&#xff1a;80 HTTPS&#xff1a;443 …

云漫圈 | 学Python还是Java, 8张漫画带你全面分析

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;Leoxin来源&#xff1a;菜鸟学PythonJava和Python两门语言都是目前非常热门的语言&#xff0c;可谓北乔峰南慕容&#xff0c;二者不分上下&#xff0c;棋逢对手。但是对于初学者来说&#xff0c;非常困惑&#xff0…

C语言 exit 函数 - C语言零基础入门教程

目录 一.exit 函数简介二.exit 函数使用三.exit 函数和 return 区别四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.exit 函数简介 #include <stdlib.h>/*描述&#xff1a;终止正在执行的进程*//*函数参数&#xff1a;status 等于 1 …

react之讲解

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>hello_react</title> </head> <body> <!-- 准备好一个容器 --> <div id"test"></div> <!-- 核心库 --> <s…

史上最全SQL优化方案

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;惨绿少年来源&#xff1a;Hollis在进行MySQL的优化之前&#xff0c;必须要了解的就是MySQL的查询过程&#xff0c;很多查询优化工作实际上就是遵循一些原则&#xff0c;让MySQL的优化器能够按照预想的合理方式运行而…

C语言 abort 函数 - C语言零基础入门教程

目录 一.abort 函数简介二.abort 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.abort 函数简介 C 语言库函数 abort 函数的作用是异常终止一个进程&#xff0c;意味着 abort 后面的代码将不再执行。 #include <stdlib.h>/…