文件操作函数 及 编译实现过程

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++程序。经过预处理,会产生一个没有头文件(都已经被展开了)、宏定义(都已经替换了),
 没有条件编译指令(该屏蔽的都屏蔽掉了),没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。

编译:将预处理完的文件逐一进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。
 编译是针对单个文件编译的,只校验本文件的语法是否有问题,不负责寻找实体。

链接:通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序

 链接程序的主要工作就是将有关的目标文件彼此相连接,也就是将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,
 使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。在此过程中会发现被调用的函数未被定义。需要注意的是,
 链接阶段只会链接调用了的函数/全局变量,如果存在一个不存在实体的声明(函数声明、全局变量的外部声明),但没有被调用,依然是可以正常编译执行的。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值