生成计算机能执行的文件的步骤
源文件.c文件 经过编译 .obj文件(目标文件) 通过链接 .exe(可执行文件)
一、预处理与宏定义
在编译之前,会提前处理一些以#开头命令,称为预处理
1、宏定义 #define
宏定义可分为无参的宏定义和有参的宏定义的
#define 宏名 宏替换 //无参的宏定义
#define pi 3.14 //用pi替换3.14
#define add(a,d) a+d //#define 宏名(参数表) 宏替换 //带参宏的定义
#define acc(a,d) a*d
int main()
{
print("%d", acc(add(4,5),add(2,3))); //acc(4+5,2.3) //结果为17
}
宏替换只用替换的功能没有计算的功能。宏的使用非常方便,一改全改,同时也可能很危险。
2、文件包含 #include
#include<xxx.h> 在系统的文件夹寻找
#include"xxx.h" 现在当前目录寻找,找不到再到系统文件目录下寻找
宏定义语句可以防止头文件重复包含 #pragma once //在头文件最前面添加
3、条件编译
平常写代码过程中,我们为了实现分支结构会经常使用if else结构,在预处理同样也有类似的功能,即条件编译。我们可以按照不同的条件去编译不同的部分,这对程序的移植和调试有着巨大的帮助
#if ... #else 的使用
#if 表达式
代码段1;
#else
代码段2;
#endif
#idef ... #endif
//格式一 //格式二
#ifdef #ifdef 宏名
代码段; 代码段1;
#endif #else
代码段2;
#endif
#undef 可以取消宏的定义
二、文件操作
1、打开文件 fopen(" 文件路径"," 打开方式")
fopen(" 文件路径"," 打开方式")
打开方式:
r 打开只读文件,文件必须存在
r+ 打开可读写文件,文件必须存在
w 打开只写文件,文件不存在会创建,文件存在会覆盖原内容
w+ 打开可读写文件,文件不存在会创建,文件存在会覆盖原内容
a 附加形式打开只写文件
a+ 附加形式打开可读写文件
b 加在上面模式之后,表示二进制方式打开,例如 “rb”、”r+b”、”wb” 等等
2、用文件指针指向文件
FILE *变量名 = fopen("名称","路径")
3、文件操作
fgetc(文件指针) //读取一个字符
fgets(装字符串容器的首地址,读取字符的大小,文件指针) //读取一个字符串
fputc(要写的字符,文件指针) //输入一个字符
fputs(要写的字符串,文件指针)
//输入一个字符串
feof //判断文件指针是否到达文件末尾
rewind(文件指针) //使用文件指针强制指向文件开头
fseek(需要移动的文件指针,移动步数,指定的位置) //移动文件指针的位置
//指定的位置 0 文件开头 1 当前位置 2 文件末尾
ftell 获取文件指针的偏移量(从开头到当前)
//格式化的数据输出
fprintf(文件指针,“格式化的内容”,参数)
//格式化输入,把文件数据输出的到程序中
fscanf(文件指针,“格式化内容”,参数)
//二进制的形式读写
fwrite(写入的东西(取地址),大小,元素个数,文件指针)
fread(读到那个容器,读的字节大小,个数,从哪读(文件指针))
4、关闭文件
fclose()
原文链接:https://blog.csdn.net/afei__/article/details/81835684