//
// 0801总结.h
// 0801代码实践
//
// Created by apple on 15-8-1.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#ifndef _801______801___h
#define _801______801___h
#endif
********************************************************
typedef 跟 #define 的区别
#define 是在编译之前做的事情,是一个预处理指令,做一个简单的替换
typedef 是定义一个类型,
********************************************************
#if-#else 条件编译指令
条件编译:
发生在预处理阶段,在编译之前做的事情
核心:根据条件 编译指定的代码
条件不同,编译的部分也不同,生成的目标文件(.o)大小也不一样
#if-#else 条件编译指令
第一种形式的格式为:
#if 常量表达式
程序段1
#else
程序段2
#endif
注意:条件编译后面的条件表达式中不能识别变量,它里面只能识别常量
和宏定义
********************************************************
#ifdef 用来判断某个宏是否定义
int a=0;
//检测宏是否定义
#ifdef DEBUG1
a=10;
#else
a=10000;
#endif
printf("%d\n",a);
#ifndef 检测宏是否定义 ifndef 如果没有定义
#ifndef DEBUG2
a=100;
#else
a=-1;
#endif
********************************************************
代码调试的问题
****************************************************
//-----------------static 与extern对局部变量的作用
static可以修饰局部变量
//作用:1)static定义的变量的生命周期会得到延长
// 2) static定义变量的语句只会被执行一次
extern 是不能修饰局部变量的
//-------------------static 与extern对全局变量的作用
static 对全局变量的作用
static修饰的全局变量,表示该全局变量只能在当前文件中使用 而不能在其他文件中使用
在不同的文件中,使用static可以声明的同名的变量
extern 对全局变量的作用
extern修饰的全局变量,表示当前变量可以在本文件中使用,也可以在
其他文件中使用
注意:
1)extern声明的全局变量在不同的文件中不能同名(两个文件须由包含关系)
//-------------------static 与extern 修饰函数
static修饰的函数是一个内部函数,(只能在定义的那个文件中使用)
extern 声明的函数,可以在定义文件中使用,也可以在其他文件中使用
****************************************************
文件的概念及分类
文件是什么?
“文件”指存储在外部介质上数据的集合,这个数据集有一个名称,叫做文件名。
文件的分类:
1) 从用户的角度看,文件可分为普通文件和设备文件两种。
2) 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。
****************************************************
C语言文件指针
在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。
定义说明文件指针的一般形式为:
FILE *指针变量标识符;
其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件 当前位置等信息。在编写源程序时不必关心FILE结构的细节。
****************************************************
文件的打开和关闭
文件在进行读写操作之前要先打开,使用完毕要关闭。所谓打开文件,实际上是建立文件的各种 有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联 系,也就禁止再对该文件进行操作。
//----------------------文件的打开(fopen函数)
fopen函数用来打开一个文件,其调用的一般形式为: 文件指针变量名 = fopen( 文件名, 使用文件方式 );
其中:
“文件指针名”必须是被说明为FILE 类型的指针变量; “文件名”是被打开文件的文件名; “使用文件方式”是指文件的类型和操作要求; “文件名”是字符串常量或字符串数组。
例如:
//定义文件指针
FILE *fp = NULL;
//打开文件
fp = fopen("a.txt", "r"); //r 表示读文件
其意义是在当前目录下打开文件a.txt,只允许进行“读”操作,并使fp指向该文件。
//-----------------------文件关闭函数(fclose函数)
文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。
fclose函数调用的一般形式是: fclose(文件指针);
例如: fclose(fp);
fclose(fp); 正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。
注意:如果文件写操作时,没有进行关闭,可能会导致文件写入失败
//------------------------操作文件的步骤:
1)引入头文件stdio.h
2) 建立文件指针
FILE *fp = NULL;
3) 打开文件
fopen(文件名,操作方式);
如果打开成功,返回文件的首地址
失败,返回NULL
4) 操作文件
5)关闭文件
fclose(文件指针);
****************************************************
文件的使用方式和注意事项
//---------------------文件使用方式
文件使用方式 意义
r 打开一个已存在的文件,准备从文件中读取数据。不能向文件写数据
w 创建一个新文件,准备向文件写入数据。不能从文件中读取数据。如
果文件已经存在,这个文件将被覆盖(先删后建)
a 打开一个已存在的文件,准备在文件尾部追加数据。不能从文件中读
取数据。如果文件不存在,则创建这个文件准备写入数据
r+ 打开一个已存在的文件,准备读写。既可以读取数据,也可以写入数
据
w+ 创建一个新文件,准备读写。如果文件已经存在,则覆盖原文件
a+ 等价于a,但可从文件中读取数据
t 打开一个文本文件
b 打开一个二进制文件
//----------------------文件注意事项
****************************************************
数据块读写函数 fread fwrite
FILE *fp =NULL;//第一步 建立文件指针fp
fp=fopen("a.txt", "w");//第二步 创建a.txt文件,fopen 打开文件,w 进行写操作 指针fp指向a.txt
char *str="may";//建立一个字符串 准备写入文件中
//fwrite(地址,块大小, 次数,指针)
fwrite(str,strlen(str), 1, fp);//第三步 操作文件 fwrite 进行文件写入操作,将str地址的字符串 每次写strlen(str)个长度,分1 次 写入fp所指向的文件
fclose(fp); //关闭文件之后刚才写入的内容才能保存,才能进行文件的读出
fp=fopen("a.txt", "r");//打开a.txt文件 进行读的操作
char ch[4]; //定义一个数组 将读出的字符 存储到数组中
//fread(地址, 块大小, 次数,指针);
fread(ch, sizeof(ch),1, fp);//从fp指针指向的文件中 每次读出sizeof(ch)个数据,分1次 读出数据 并将数据 存储进数组ch 中
****************************************************
判断文件是否创建成功
FILE *fp =NULL;//建立文件指针
fp=fopen("a.txt", "w");// 打开文件
if (fp!=NULL) {
//如果创建成功 进行文件操作
}else {
//如果失败 提示用户失败
printf("打开失败,按任意键退出\n");
getchar();//从键盘接收一个字符
return 0;//程序结束
}
****************************************************
|
|