第 16 章 C 预处理器和 C 库(可变参数:stdarg.h)

 1 /*-------------------------------------------------
 2     varargs.c -- use variable number of arguments
 3 -------------------------------------------------*/
 4
 5 #include <stdio.h>
 6 #include <stdarg.h>
 7
 8 double sum(int, ...);
 9
10 int main()
11 {
12     double s, t;
13
14     s = sum(3, 1.1, 2.5, 13.3);
15     t = sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1);
16
17     printf("return value for sum(3, 1.1, 2.5, 13.3):                %g\n", s);
18     printf("return value for sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1): %g\n", t);
19
20     return 0;
21 }
22
23 double sum(int lim, ...)
24 {
25     va_list ap;                            //声明一个对象储存参数
26     double tot = 0;
27
28     va_start(ap, lim);                    //把 ap 初始化为参数列表
29
30     for (int i = 0; i != lim; ++i)
31         tot += va_arg(ap, double);        //访问参数列表的每一项
32
33     va_end(ap);                            //清理工作
34
35     return tot;
36 }

varargs.c

原文地址:https://www.cnblogs.com/web1013/p/9260984.html

时间: 2024-10-13 05:48:45

第 16 章 C 预处理器和 C 库(可变参数:stdarg.h)的相关文章

C Primer Plus (第五版) 第十六章 C预处理器和C库 编程练习

第十六章 C预处理器和C库 开发一个包含您需要使用的预处理器定义的头文件 //max.h  #ifndef _MAX_H_     #define _MAX_H_     #define MAX(X, Y) ((X)>(Y)?(X):(Y)) #endif 2.两个数的调和平均数可用如下方法得到:首先对两数的倒数取平均值,最后再取倒数.使用#define指令定义一个宏"函数"执行这个运算.编写一个简单的程序测试该宏. #include <stdio.h> #defin

(转载)虚幻引擎3--第九章 – UNREALSCRIPT预处理器

第九章 – UNREALSCRIPT预处理器 9.1概述 9.2 MACRO(宏)的基础知识 指南 9.1 –您的第一个宏 9.3具有参数的宏 指南 9.2 – MACRO参数 9.4内置宏 DEFINE IF/ELSE/ENDIF 实例: IF/ELSE/ENDIF的应用 INCLUDE ISDEFINED/NOTDEFINED 示例: 结合使用 IF/ELSE/ENDIF 和 ISDEFINED/NOTDEFINED UNDEFINE LOG/WARN LOGD ASSERT 示例:验证条件

《C Primer Plus》学习笔记——C预处理器和C库

1.在Unix系统中,尖括号告诉预处理器在一个或多个标准系统目录中寻找文件.双引号告诉预处理器先在当前目录(或文件名中指定的其他目录)中寻找文件,然后在标准位置寻找文件. 2.#undef指令:取消定义一个给定的#define #define LIMIT 400 #undef LIMIT 3.条件编译 #ifdef.#else和#endif指令 #ifdef 宏名 //语句段1 #else //语句段2 #endif 作用:当标识符已经被定义过(一般是用#define命令定义),则对语句段1进行

C++ Primer Plus 第六版 第16章 string类和标准模板库

1.string实际上是模板具体化basic_string<char> 的一个typedef,有默认参数,所以省略了初始化参数 2.size_type是一个依赖于实现的整形 string将string::npos定义为字符串的最大长度 3.string类的构造函数P656 4.对于c-风格字符串,3种输入方法:cin>>   cin.getline(),cin.get 对于string   ,2种输入方法:cin>>,getline(cin,string对象) 5.st

C++ primer plus读书笔记——第16章 string类和标准模板库

第16章 string类和标准模板库 1. string容易被忽略的构造函数: string(size_type n, char c)长度为n,每个字母都为c string(const string & str, size_type pos = 0, size_type n = pos)初始化为str中从pos开始到结尾的字符,或从pos开始的n个字符 string(const char *s, size_type n)初始化为s指向的前n个字符,即使超过了s的结尾: string(Iter b

C和指针 (pointers on C)——第十四章:预处理器

第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什么#include,#define #ifdef #undef这些,可是绝对用的不多.作为全面了解学C,还是应该都看一看. 预处理器使用方法非常讲究,用不好会失误,用好了会大大加快执行时速度(不是编译速度). 总结: C程序的第一个步骤就是预处理.预处理器共包括下面几个符号: 1.#define 定

C Primer Plus之C预处理器和C库

编译程序前,先由预处理器检查程序(因此称为预处理器).根据程序中使用的预处理器指令,预处理器用符号缩略语所代表的内容替换程序中的缩略语. 预处理器不能理解C,它一般是接受一些文件并将其转换成其他文本. 翻译程序的第一步 对程序作预处理前,编译器会对它进行几次翻译处理. 编译器首先把源代码中出现的字符映射到源字符集(?).该过程处理多字节字符和使C外观更加国际化的三元字符(?)扩展 编译器查找反斜线(\)后紧跟换行符的实例并删除这些实例.注意:在这种场合下,“换行符”代表按下回车键在源代码文件中新

C 基础 - 预处理器与C库

C预处理器在程序执行之前查看程序. 预处理器不做计算,不对表达式求值,只进行替换. 预处理器指令: #define (符号常量), 定义时组成部分如下: * #deinfine 符号指令 * 宏 * 替换列表 对于大部分的数字常量,可以使用符号常量. #define 中还可以使用参数 #define SQUARE(X) X*X z = SQUARE(2); 文件包含: #include 指令 当预处理器发现#include指令时,会查看后面的文件名把文件的内容包含到当前文件中.

C预处理器和C库

#define #include #undef #ifdef #else #endif #if #elif #else #endif 预处理宏: p463 _ _fun_ _是预定义标识符(函数作用域),不是宏(文件作用域) #line --重置_ _LINE_ _和_ _FILE_ _宏报告的行号和文件名 #error #pragma --将编译器指令置于源代码中 内联函数 inline --减少执行的时间 函数库 .数学库 略... exit() atexit() exit()执行了atex