fputc函数输出文件字符 运行成功后该项目下会生成test.txt文件并已经写入abcdef.....xyz
fgetc 写入函数 把文件数据读入到编译器中 该函数会把刚才项目中的abcdef..xyz显示在编译器下
//int main()
//{
// //打开文件
// FILE* pf = fopen("test.txt", "w");//打开成功
// if (pf == NULL)//打开失败
// {
// perror("fopen");//提示错误
// return 1;
// }
// //写文件
// char ch = 'a';
// for (ch = 'a'; ch <= 'z'; ch++)
// {
// fputc(ch, pf);
// }
// //关闭文件
// fclose(pf);
// pf = NULL;
// return 0;
//}
//int main()
//{
// FILE* pf = fopen("test.txt", "r");
// if (pf == NULL)
// {
// perror("fopen");
// return 1;
// }
// int ch = 0;
// while ((ch=fgetc(pf))!=EOF)
// {
// printf("%c ", ch);
// }
// return 0;
//}
//scanf格式化的输入函数
//printf格式化的输出函数
// fscanf针对所有输入流的格式的输入函数
// fprintf针对所有输出流的格式化输出函数
// sscanf把一个字符串转换成格式化的数据
// sprintf把一个格式化的数据转换成字符串
//以二进制写入用 fwrite 其参数(写入到那个位置(注意要取地址),其目标大小,个数,文件指针)
// fwrite(&s, sizeof(struct S), 1, pf);
struct S
{
char name[20];
int age;
double score;
};
//int main()
//{
// struct S s = { "张三",22,63 };
// FILE* pf = fopen("test01.txt", "wb");
// if (pf == NULL)
// {
// perror("fopen");
// return;
// }
// //以二进制写入
// fwrite(&s, sizeof(struct S), 1, pf);
// //关闭文件
// fclose(pf);
// pf = NULL;
// return 0;
//}
源文件 -> 可执行程序
编译(预编译->编译->汇编)-> 链接
预编译:1.头文件的包含 #include 预处理指令
2.define定义符号的转换 #define
3.注释删除
预编译 test.c->test.i 一些文本操作
编译 test.i->test.s把C语言代码翻译成汇编代码
汇编 test.s->test.o 把汇编指令翻译成了二进制指令
预处理:相当于根据预处理指令组装新的C / C++程序。经过预处理,会产生一个没有头文件(都已经被展开了)、宏定义(都已经替换了),
没有条件编译指令(该屏蔽的都屏蔽掉了),没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。
编译:将预处理完的文件逐一进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。
编译是针对单个文件编译的,只校验本文件的语法是否有问题,不负责寻找实体。
链接:通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序
链接程序的主要工作就是将有关的目标文件彼此相连接,也就是将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,
使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。在此过程中会发现被调用的函数未被定义。需要注意的是,
链接阶段只会链接调用了的函数/全局变量,如果存在一个不存在实体的声明(函数声明、全局变量的外部声明),但没有被调用,依然是可以正常编译执行的。