注释转换
来源:互联网 发布:数据库系统设计 编辑:程序博客网 时间:2024/06/16 08:13
本函数就是见得实现一下C注释、CPP注释和普通模式之间的转换
(这只是在下的粗浅理解,不足的地方还请谅解,欢迎留言提出,后期理解深入后会加以改进)
1、先来了解一下这四种模式之间转换的条件
2、接下来就是完成的主要步骤了
我是将主函数与实现函数分不同的文件建立的
(1)、分别建立 mian.c convert_comment.c convert_comment.h三个新建项
在mian.c 中是主函数只需要调用在convert_comment.c 的函数就OK了
在convert_comment.h中就是函数的声明了
在convert_comment.c中就是函数的定义了
这也是最主要的代码部分
(2)、接下来将详细的介绍代码部分
也就是三个函数的实现
普通模式
void do_null_status(FILE *ifp, FILE *ofp) //普通模式{int c = fgetc(ifp);if (c == '/') //是 '/'时,进入判断 {int s = fgetc(ifp);if (s == '*') //下一发是'*'时{fputc('/', ofp); fputc('/', ofp); //将'/*'转换为'//'
status = CSTATUS; //转换至C注释函数}else if (s == '/') //下一个是'/'时{fputc('/', ofp);fputc('/', ofp);status = CPPSTATUS; //转换至CPP注释函数}else{fputc(c, ofp); ungetc(c, ifp);}}else if (c == EOF) //为EOF时,文件结束status = EOFSTATUS;else fputc(c, ofp);}
C注释
void do_c_status(FILE *ifp, FILE *ofp) //C注释{int c = fgetc(ifp);if (c == '*') //为'*'时进入判断{int s = fgetc(ifp);if (s == '/') //为'/'时,说明C注释结束{fputc('\n', ofp);status = NULLSTATUS; //转入普通模式}else{fputc(c, ofp);ungetc(c, ifp);status = CSTATUS;}}else if (c == EOF)status = EOFSTATUS;else if (c == '\n') //因为C注释是多行注释,所以遇到'\n’时,还是C注释,{ //需要给下一行添加'//'fputc(c, ofp);fputc('/', ofp);fputc('/', ofp);status = CSTATUS;}else{fputc(c, ofp);status = CSTATUS;}}
CPP注释
void do_cpp_status(FILE *ifp, FILE *ofp) //CPP注释{int c = fgetc(ifp);if (c == '\n') //若为'\n'则CPP注释结束{fputc(c, ofp);status = NULLSTATUS; //转为普通模式}else if (c == EOF) //为EOF则文件结束{fputc(c, ofp);status = EOFSTATUS;}else{fputc(c, ofp);status = CPPSTATUS;}}以上就是我的理解
下面是整体代码
mian.c
#include<stdio.h>#include"convert_comment.h"int main(){convert_main();return 0;}convert_comment.h
#ifndef __CONVERT_COMMENT_H__#define __CONVERT_COMMENT_H__#define INPUTFILE "input.c"#define OUTPUTFILE "output.c"enum {NULLSTATUS, // 普通模式CSTATUS, // C模式CPPSTATUS, //CPP模式EOFSTATUS, //EOF模式};void convert_main();void do_null_status(FILE *ifp, FILE *ofp); //普通模式函数声明void do_c_status(FILE *ifp, FILE *ofp); //C注释函数声明void do_cpp_status(FILE *ifp, FILE *ofp); //CPP注释函数声明#endifconvert_comment.c
#include <stdio.h>#include <stdlib.h>#include "convert_comment.h"int status = NULLSTATUS;void do_null_status(FILE *ifp, FILE *ofp) //普通模式{int c = fgetc(ifp);if (c == '/'){int s = fgetc(ifp);if (s == '*'){fputc('/', ofp);fputc('/', ofp);status = CSTATUS;}else if (s == '/'){fputc('/', ofp);fputc('/', ofp);status = CPPSTATUS;}else{fputc(c, ofp);ungetc(c, ifp);}}else if (c == EOF)status = EOFSTATUS;else fputc(c, ofp);}void do_c_status(FILE *ifp, FILE *ofp) //C注释{int c = fgetc(ifp);if (c == '*'){int s = fgetc(ifp);if (s == '/'){fputc('\n', ofp);status = NULLSTATUS;}else{fputc(c, ofp);ungetc(c, ifp);status = CSTATUS;}}else if (c == EOF)status = EOFSTATUS;else if (c == '\n'){fputc(c, ofp);fputc('/', ofp);fputc('/', ofp);status = CSTATUS;}else{fputc(c, ofp);status = CSTATUS;}}void do_cpp_status(FILE *ifp, FILE *ofp) //CPP注释{int c = fgetc(ifp);if (c == '\n'){fputc(c, ofp);status = NULLSTATUS;}else if (c == EOF){fputc(c, ofp);status = EOFSTATUS;}else{fputc(c, ofp);status = CPPSTATUS;}}void convert_work(FILE *ifp, FILE *ofp){while (status != EOFSTATUS){switch (status){case NULLSTATUS:do_null_status(ifp, ofp);break;case CSTATUS:do_c_status(ifp, ofp);break;case CPPSTATUS:do_cpp_status(ifp, ofp);break;case EOFSTATUS:break;default:break;}}}void convert_main(){ FILE *ifp = fopen(INPUTFILE, "r");FILE *ofp = fopen(OUTPUTFILE, "w");if (ifp == NULL || ofp == NULL){printf("This is no have!");return;}convert_work(ifp, ofp);fclose(ifp);fclose(ofp);}
运行结果图
阅读全文
0 0
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 观察者模式和委托
- TensorFlow: How to freeze a model and serve it with a python API
- 安卓开发中,onSaveInstanceState和onRestoreInstanceState,调用时机分析
- java 导入csv , 里面 有“”回车换行等,都可以去掉
- webstorm中.vue格式文件中代码高亮显示
- 注释转换
- Apache优化(一)
- 实现像UGUI中Button一样可以拖拽绑定事件
- PHP获取文件扩展名
- 分布式第二章 单机存储系统
- TP框架复合查询条件
- 学习总结5
- 函数形参默认值
- 设计模式的艺术之道--职责链模式