【函数原型】
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 是一个虚表,里面的记录是一些函数指针,便于操作 _I ......
这一系列文章是我构建C/C++插件开发框架开放框架的过程。后面会一直更新,直至构建完成。
《构建自己的C/C++插件开发框架(一)——初步设想》
《构建自己的C/C++插件开发框架(二)——总体功能》
《
构建自己的C/C++插件开发框架(三)——总体结构
》
《构建自己的C/C++插件开发框架(四)——核心层设计和实现》
......
这一系列文章是我构建C/C++插件开发框架开放框架的过程。后面会一直更新,直至构建完成。
《构建自己的C/C++插件开发框架(一)——初步设想》
《构建自己的C/C++插件开发框架(二)——总体功能》
《
构建自己的C/C++插件开发框架(三)——总体结构
》
《构建自己的C/C++插件开发框架(四)——核心层设计和实现》
......
最近一个朋友准备把C代码在ECLIPSE上编译,以前一直搞的JAVA,也知道ECLIPSE支持C工程,但是自己从来没搞过,所以就自己先从网络上找资料,主要方法如下
1、安装JDK和Eclipse
这里就不多说,具体请见:http://blog.chinaunix.net/u/16292/showart_223309.html
我的安装环境是jdk1.5,eclipse3.2.1
2、安装C++的Ecilpse插件CDT
cdt插件的下载:
http://www.eclipse.org/cdt/
http://download.eclipse.org/tools/cdt/builds/
或者:
打开Eclipse,选择Help、Software Update、Find and Install
选择Search new features,点Next
点击New Remote Site,在Name框输入CDT(名字,可以随自己喜欢),
URL框输入http://update.eclipse.org/tools/cdt/releases/new
3、选择一个windows下C++编译器,这里我们选择Cygwin
下载安装地址:http://sourceware.org/cygwin/
这里重点介绍下。
step1. 下载后,点击安装文件(setup.exe)进行安装,第一个画面是GNU版权说明,点"下一步(N)—>",
进入安装模式选择画面。
step2. 安装模式有"Install from Internet"、"Download form Internet"、
"Install from Local Directory" 三种。"Install fo ......
最近一个朋友准备把C代码在ECLIPSE上编译,以前一直搞的JAVA,也知道ECLIPSE支持C工程,但是自己从来没搞过,所以就自己先从网络上找资料,主要方法如下
1、安装JDK和Eclipse
这里就不多说,具体请见:http://blog.chinaunix.net/u/16292/showart_223309.html
我的安装环境是jdk1.5,eclipse3.2.1
2、安装C++的Ecilpse插件CDT
cdt插件的下载:
http://www.eclipse.org/cdt/
http://download.eclipse.org/tools/cdt/builds/
或者:
打开Eclipse,选择Help、Software Update、Find and Install
选择Search new features,点Next
点击New Remote Site,在Name框输入CDT(名字,可以随自己喜欢),
URL框输入http://update.eclipse.org/tools/cdt/releases/new
3、选择一个windows下C++编译器,这里我们选择Cygwin
下载安装地址:http://sourceware.org/cygwin/
这里重点介绍下。
step1. 下载后,点击安装文件(setup.exe)进行安装,第一个画面是GNU版权说明,点"下一步(N)—>",
进入安装模式选择画面。
step2. 安装模式有"Install from Internet"、"Download form Internet"、
"Install from Local Directory" 三种。"Install fo ......
用c语言做了个通讯录,系统一运行时便将数据文件加载进内存,并用链表存储。退出系统时,自动将链表中的所有节点再存入文件。
可是现在,每次退出系统,文件里都会比链表多存储一条记录。
如:现在只有两条记录,退出后在启动时一查询,就会多一条乱记录(系统自己加的)。
加载文件的部分代码如下:
/*判断文件是否为空*/
fseek(groupfp,0,2);/*指针指向group.dat文件尾部*/
fseek(linkmanfp,0,2);/*指针指向linkman.dat文件尾部*/
if(ftell(groupfp)>0){ /*文件非空*/
rewind(groupfp);/*文件指针重新指向文件开始处*/
/*下面要装载该文件到group链表中*/
while(!feof(groupfp)){
p=(GroupNote)malloc(sizeof(struct groupnote));
fread(p,sizeof(struct groupnote),1,groupfp);
p->next=NULL;/*刚读取进来的指针是上一次的,所以重新赋值为空*/
gn->next=p;
&nb ......
http://blog.csdn.net/eroswang/archive/2009/06/12/4265046.aspx
1,防止一个头文件被重复包含
#ifndef COMDEF_H
#define COMDEF_H
//头文件内容
#endif
2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。
typedef unsigned char boolean; /* Boolean value type. */
typedef unsigned long int uint32; /* Unsigned 32 bit value */
typedef unsigned short uint16; /* Unsigned 16 bit value */
typedef unsigned char uint8; /* Unsigned 8 bit value */
typedef signed long int int32; /* Signed 32 bit value */
typedef signed short int16; /* Signed 16 bit value */
typedef signed char int8;&nbs ......
1,防止一个头文件被重复包含
#ifndef COMDEF_H
#define COMDEF_H
//头文件内容
#endif
2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。
typedef unsigned char boolean; /* Boolean value type. */
typedef unsigned long int uint32; /* Unsigned 32 bit value */
typedef unsigned short uint16; /* Unsigned 16 bit value */
typedef unsigned char uint8; /* Unsigned 8 bit value */
typedef signed long int int32; /* Signed 32 bit value */
typedef signed short int16; /* Signed 16 bit value */
typedef signed char int8; /* Signed 8 bit value */ ......