#include <stdarg.h>

名称描述相容  // 作用描述

va_start使va_list指向起始的参数  

va_arg检索参数C89

va_end释放va_list

va_copy拷贝va_list的内容

实例解析:

#include <stdio.h> #include <stdarg.h> void printargs(int arg1, ...) /* 输出所有int类型的参数,直到-1结束 */  //参数列表中, 后面的元素类型不一定,va_arg()函数的返回类型决定的 {

va_list ap;//va_list 是数据类型     int i;

va_start(ap, arg1); //两个参数:第一个参数为va_list 数据类型的变量,第二个参数为函数第一个参数的名称     // 接着每一调用va_arg就会返回下一个参数,     for (i = arg1; i != -1; i = va_arg(ap, int)) //va_arg的第一个参数为va_list,第二个参数为返回的数据类型     printf("%d ", i);     double f;     f  = va_arg(ap,double);    printf("\t浮点型的数据%lf",f);     va_end(ap); //最后va_end必须在函数返回前被va_list呼叫(     putchar(‘\n‘); } //va_copy,它能够复制va_list而va_copy(va2, va1)意思为拷贝va1到va2。 int main(void) { printargs(5, 20, 14, 84, 97, 15, 24, 48, -1,0.123); printargs(84, 51, -1,0.234); printargs(-1,34.22); printargs(1, -1,23.23); return 0; }

自己赋值粘贴运行;

时间: 2024-10-27 12:44:16

#include <stdarg.h>的相关文章

#include &lt;mutex&gt;

多线程初级 1 #include <iostream> 2 #include <thread> 3 #include <windows.h> 4 #include <mutex> 5 6 //两个线程并行访问一个变量 7 8 int g_num = 20;//找到或者找不到的标识 9 std::mutex g_mutex; 10 11 void goA(int num) 12 { 13 g_mutex.lock();//你访问的变量,在你访问期间,别人访问不

[C++11 并发编程] 08 - Mutex std::unique_lock

相对于std::lock_guard来说,std::unique_lock更加灵活,std::unique_lock不拥有与其关联的mutex.构造函数的第二个参数可以指定为std::defer_lock,这样表示在构造unique_lock时,传入的mutex保持unlock状态.然后通过调用std::unique_lock对象的lock()方法或者将将std::unique_lock对象传入std::lock()方法来锁定mutex. #include <mutex> class some

[C++11 并发编程] 06 Mutex race condition

上一节中介绍了mutex的基本使用方法,使用mutex来保护共享数据并不能解决race condition带来的问题,假如我们有一个堆栈数据结构类似于std::stack它提供了5个基本操作push(),pop(),top(),empty(),和size().这里的top()操作返回栈顶元素的拷贝,这样我们就可以使用一个mutex来保护栈内部的数据.但是race codition情况下,虽然使用mutex在stack的每个接口内都对共享数据进行了保护,仍然有问题存在. #include <deq

数据共享之互斥量mutex

互斥量介绍 互斥量可以保护某些代码只能有一个线程运行这些代码.如果有个线程使用互斥量执行某些代码,其他线程访问是会被阻塞,直到这个线程执行完这些代码,其他线程才可以执行. 一个线程在访问共享数据前,给互斥量上锁,这时其他线程再给互斥量上锁会阻塞直到这个线程给互斥量解锁. 互斥量是C++中最常用的数据保护机制,但是它也不万能的.在编写代码时,合理的组织代码来避免资源竞争非常重要.使用互斥量可能会带来其他问题,比如死锁. 在C++中使用互斥量 创建互斥量使用mutex,给互斥量上锁使用函数lock(

c++11多线程学习笔记之二 mutex使用

// 1111111.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <thread> #include <mutex> int gcounter = 0; std::mutex gmtx; std::mutex gmtxOutput; void Increases() { for (int i = 0; i<10000; ++i) { if (g

mutex和CRITICAL_SECTION,互斥和临界区

本文不没有任何知识可讲,只是帖上自己测试的结果. 想看底层原理的可以直接关闭. 不过对于急着要选方案的人,倒提供一些帮助. 先说一些无关紧要的废话: ==================================================================================================================================================== 先说说为什么会有这篇文章. 我在做练习的时候,参考一

关于#include &lt;bits/stdc++.h&gt;

经常看人写#include <bits/stdc++.h>却不知道是干啥的? #include<bits/stdc++.h>包含了目前c++所包含的所有头文件 对比: #include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #include <deque> #include &l

[C++11 并发编程] 05 Mutex 基本操作

Mutex是C++中最常见的数据保护机制之一,在访问一块共享数据前,lock mutex,在完成对数据的访问后,unlock mutex.线程库当一个特定mutex被某个线程lock后,其它尝试lock同一个mutex的线程都会被挂起指导这个mutex被unlock.这就保证了所有线程看到的数据都是完整的,不会被修改了一部分的数据. 在C++中,通常我们通过创建std::mutex的实例来获得一个mutex,调用它的成员函数lock()来锁住它,调用unlock来解锁,但实际实现时,并不推荐这么

漫话C++0x(五)—- thread, mutex, condition_variable

熟悉C++98的朋友,应该都知道,在C++98中没有thread, mutex, condition_variable这些与concurrency相关的特性支持,如果需要写多线程相关程序,都要借助于不同平台上各自提供的api,这样带来的问题就是程序的跨平台移植性比较差,经常要用一大堆的#ifdef WIN32类似的宏来区分不同的平台,搞得程序很难看.C++0x最原始的初衷之一就是为了让C++的功能更加强大,更加方便使用.现如今硬件如此发达,concurrency在程序设计中已经是司空见惯的事情了

code::blocks配置头文件#include&lt;bits/stdc++.h&gt;

万用头文件#include<bits/stdc++.h>,包含了<queue>,<vector>,<string>,<algorithm>,<iostream>等等各个竞赛中常用或不常用的头文件,可谓省时省力,竞速必备.如今已被大部分oj所支持.面试时大部分的判题系统也亲测可用.但有的编译器却不能够使用这个头文件.本文以code::blocks为例,教大家配置此头文件 1.寻找code::blocks的gnu gcc编译环境 sett