易截截图软件、单文件、免安装、纯绿色、仅160KB

C变参函数的实现机制

C的变参问题与print函数的实现
我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() 这个函数,它的定义是这样的: int printf( const char* format, ...); 
它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法:
   printf("%d",i);
   printf("%s",s);
   printf("the number is %d ,string is:%s", i, s);
究竟如何写可变参数的C函数以及这些可变参数的函数编译器是如何实 现的呢?本文就这个问题进行一些探讨,希望能对大家有些帮助.会
C++的网友知道这些问题在C++里不存在,因为C++具有多态性.但C++是C的一个 超集,以下的技术也可以用于C++的程序中.限于本人
的水平,文中如果有 不当之处,请大家指正. 
(一)写一个简单的可变参数的C函数 
下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏: 
void va_start( va_list arg_ptr, prev_param ); 
type va_arg( va_list arg_ptr, type ); 
void va_end( va_list arg_ptr ); 
va在这里是variable-argument(可变参数)的意思. 
这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.下面我们写一个简单的可变参数的函数,该函数至少有一个整数
参数,第二个参数也是整数,是可选的.函数只是打印这两个参数的值. 
   void simple_va_fun(int i, ...)
   {
     va_list arg_ptr;
     int j=0;
     
     va_start(arg_ptr, i);
     j=va_arg(arg_ptr, int);
     va_end(arg_ptr);
     printf("%d %d\n", i, j);
     return;
   } 
我们可以在我们的头文件中这样声明我们的函数: extern void simple_va_fun(int i, ...); 我们在程序中可以这样调用:
   simple_va_fun(100);
   simple_va_fun(100,200);
   从这个函数的实现可以看到,我们使用可变参数应该有以下步骤:
   1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数的指针.
   2)然后用va_


相关文档:

C/C++ 与 JAVA 的互操作

前言:前段时间在CSDN的C++社区遇到一个需要封装考勤机接口的动态库给JAVA调用的帖子,勾起了我对JAVA的无限怀念。在此,我想把这项技术简单再介绍一下。
一、关于Java Native Interface (JNI)
JNI是JAVA本地编程接口,属于JDK的一部分。它允许JAVA能够操作本地API或由其他语言编写的动态库。不过当你使用这项技术的时候� ......

c函数scanf(),printf()等常用格式字符串

%d   短整形,一般占两个字节
%u   无符号短整形
%ld  长整形,一般占四个字节
%c   字符型
%s    字符串
主要用在输入输出函数:scanf(),printf()里
\a:蜂鸣,响铃
\b:回退:向后退一格
\f:换页
\n:换行,光标到下行行首
\r:回车,光标到本行行首
\t:水平制表
\v:垂直制表 ......

c/C++编译的程序占用的内存

一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类 ......

MISRA C :让嵌入式系统更加安全可靠的一些关键规则

转自:http://www.bmrtech.com/article/2008/081126.htm
    没人能否认嵌入式应用正变得越来越普遍。但是,当系统越来越复杂,而我们赋予系统越来越多的责任的时候,我们将必须面对一些重要问题。其中最重要的问题是:我们如何才能确保嵌入式系统是安全可靠的?
C 编程语言为用户提供了许多强大的功能,� ......

我的c学习之路二 hello world


<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体" ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号