C语言高级第二部分
条件编译: 关键字 #if #ifdef(如果定义了) #ifndef(如果没定义)
按不同的条件编译去编译不同程部分序,有利于程序的移植和调试。
条件编译可以通过条件语句来实现,但是会对整个程序进行编译,生成的目标代码很长,
采用挑时间编译,则会根据条件之编译程序的1段或2段,生成的目标程序较短。
条件编译发生在编译之前。根据条件编译制定的代码。
需要配合宏定义使用(#define)
使用方法:
以#if开始#endif结束 中间可以写 #elif
列子:
1 #include<stdio.h> 2 #define score 34
1 #if score < 60 2 printf("E\n"); 3 #elif score <=69 4 printf("D\n"); 5 #elif score <=79 6 printf("C\n"); 7 #elif score <=89 8 printf("B\n"); 9 #else 10 printf("A\n"); 11 #endif
使用条件编译指令调试Bug:
1 #define DEBUG1 1 2 3 #if DEBUG1 ==1 4 //显示调试信息 5 #define Log(format,...) printf(format,## __VA_ARGS) 6 7 #else 8 //不显示调试信息 9 10 #define Log(format,...) 11 12 #endif 13 14 int main(int argc,const char * argv[]){ 15 16 //DEBUG ==1 显示调试信息 17 //DEBUG ==0 不显示调试信息 18 Log("xxxxxxxxxxxxxx-->%d\n",10); 19 reyurn 0; 20 } 21 22 23 //打印结果: xxxxxxxxxxxxxx-->10
static和extern都是用来修饰变量(局部的static实际也是全局的)
static修饰的变量 只有你的包含那个变量的定义的源代码文件可以访问(内部的变量)
extern定义的变量的哪个源文件都可访问 只要声明了就可以(外部变量)
对文件操作的步骤:
1)一如头文件(stdio.h)
2)定义文件指针
3)打开文件
4)文件读写
5)关闭文件
操作文件的相关函数:
字符读写函数: fgetc和fputc
字符串读写函数: fgets和fputs
数据块读写函数: freed和fwrite
格式化读写函数: fscanf和fprintf
使用以上函数都要求包含stdio.h头文件!
使用fgetc()获取字符的时候指针自动向后偏移,也就是说:
fgetc(s);
fgetc(s);
fgetc(s);
三次获取的是不同的字符(文件内有多个字符)。
fopen与fclose函数:
![](https://images0.cnblogs.com/blog2015/779152/201507/012301154374202.png)
使用文件的方式分类:
字符写入文件函数fputc
读字符函数fgetc
//步骤: //1、定义文件指针 FILE *fp = NULL; //2、打开文件 打开fputc1.txt 以 w(写,如果文件不存在,可创建) fp = fopen("fputc.txt","w"); //3、判断是否打开成功 if (fp!=NULL){ //4、如果打开成功,要写入字符 // 要写入地方字符 文件指针 // 写入字符的变量 fputc(ch,fp); printf("写入成功\n"); } //5、关闭文件指针!
字符串写函数fputs:
字符串读函数:
函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用形式为:
fgets(字符数组名,n,文件指针);
其中的n是一个整数。表示从文件中读出的字符串不超过n-1个字符。
在读入的最好一个字符后加上串结束标志‘\n’。例如:
fget(str,n,fp);
的意义是从fp所指的文件中读取n-1个字符送入字符数组str中。
列:从string文件中读取一个含10个字符的字符串。
//定义文件指针 FILE *fp = fopen("a.txt",'r'); if(fp != NULL){ //文件打开成功 char ch[11]; //读取10个字符,最后一个放\0 fgets(ch,11,fp); printf("%s\n",ch); }else{ //文件打开失败 printf("文件读取失败请按任意键退出!"); getchar();//等待用户输入一个字符后,在退出 exit (1);//程序退出