ANSI C——printf
【函数原型】
int printf(char *format...);
【功能描述】
标准输出函数。
【举例】
#include<stdio.h>
int main ( int argc, char *argv[] )
{
printf("hello world!!\n");
return 0;
}
【实现分析】
/*printf.c*/
int __printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
/**/
vfprintf 的原型是:
int vfprintf (FILE *s, const char *fmt, va_list ap);
这里printf的实现其实是调用vfprint实现的,其中stdout是一个特殊FILE类型的指针:
_IO_FILE *stdout = (FILE *) &_IO_2_1_stdout_;
_IO_2_1_stdout_(_IO_FILE_plus )比普通FILE(_IO_FILE )多了一个_IO_jump_t
*vtable:
struct _IO_FILE_plus
{
_IO_FILE file;
const struct _IO_jump_t *vtable
;
};
这个vtable的干啥的??
这里的vtable 是一个虚表,里面的记录是一些函数指针,便于操作 _IO_FILE
结构,与面向对象中的成员函数有点类似。
以非面向对象的C写出了有点象C++中的类东西,有了该vtable,实现了多态性。
【扩展知识——可变参数】
ANSI C——可变参数
【扩展知识—— 格式化输出】
ANSI C——格式化输出
转载,请声明来自:http://blog.csdn.net/oncoding/archive/2009/09/12/4544921.aspx
相关文档:
1、 经常看见return EXIT_SUCCESS或return EXIT_FAILURE,但都不知这两个来自何处,现在才知原来stdlib.h定义了EXIT_SUCCESS和EXIT_FAILURE符号。
在stdlib.h头文件里:
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
& ......
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G &nbs ......
1、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那 ......
Reading and Writing Excel file with pure C api in windows system. tested on windows 2000, hope it can help you:
#ifndef _WINXLS_H_
#define _WINXLS_H_
/*============================================================================*
* Include Files
*================== ......
【原型】
type fun( type arg1, type arg2, ...
);
【描述】
主要用在参数个数不确定的函数中,例如:printf函数。
【使用方法】
参考:glib/manual/Add.c
#include <stdarg.h>
#include <stdio.h>
int add_em_up (int coun ......