注释转换
来源:互联网 发布:navicat linux 安装 编辑:程序博客网 时间:2024/05/19 22:51
我们编译的代码一般会有四种状态:正常代码. c风格的注释. c++风格的注释. EOF。
梳理一下文件的内容,简单包含以下几部分,它们间的关系如下图:!
注释转换的原理
C++风格注释不变(//)C风格注释改成C++风格注释(/* */————————//)
弄清楚转换关系,下面编写代码来实现注释的转换。
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include"convert.h"static int status = NULLSTAT;void do_null_stat (FILE *ipf,FILE *opf)//状态为普通时的处理{ int c = fgetc(ipf); switch (c) { case'/':// /* */ // a/b { int s = fgetc (ipf); switch (s) { case'*': { fputc ('/',opf);// 将/*转成//的注释风格 fputc ('/',opf); status = CSTAT; break; } case'/': { fputc ('/',opf); fputc ('/',opf); status = CPPSTAT; break; } case EOF: status = EOFSTAT; break; default:// a/b { fputc (c,opf); ungetc(s,ipf);// 将/后面的东西退回给文件中 status = NULLSTAT; break; } } } break; case EOF: status = EOFSTAT; break; default: fputc (c,opf); break; }}void do_cpp_stat (FILE *ipf,FILE *opf)// C++风格注释{ int a= fgetc (ipf); // 获取//后的第一个字符 switch (a) { case'\n': //如果是\n,换行。注释结束(转成正常状态) { fputc (a,opf); status = NULLSTAT; break; } case EOF: status = EOFSTAT; break; default:// 不换行也不是EOF ,那么输出后面的字符。 { fputc (a,opf); status = NULLSTAT; break; } }}void do_c_stat (FILE *ipf,FILE *opf)// /*风格注释 /* * */ /* dgh */ /* 注释好几行*/{ int f = fgetc(ipf); //提取/*后第一个字符 switch (f) { case'\n': { fputc (f,opf); fputc ('/',opf); fputc ('/',opf); status = CSTAT; } break; case'*': // */ * */ { int s = fgetc (ipf); switch (s) { case'/':// */后还有语句 { int n = fgetc (ipf); if (n!='\n'){ fputc ('\n',opf); ungetc (n,ipf); status = NULLSTAT; } else { fputc (n,opf); status = NULLSTAT; } } break; case EOF: status = EOFSTAT; break; default: fputc (f,opf); ungetc (s,ipf); status = CSTAT; break; } } break; case EOF: status = EOFSTAT; break; default: fputc (f,opf); break; }}static void convert_work (FILE *ipf,FILE *opf){ while (status!=EOFSTAT) { switch (status) { case NULLSTAT://普通 do_null_stat (ipf,opf); break; case CPPSTAT://C++ do_cpp_stat (ipf,opf); break; case CSTAT://C do_c_stat (ipf,opf); break; case EOFSTAT://EOF break; default: break; } }}void convert_main (){ FILE *ipf = fopen(INPUT,"r");//以读方式打开 FILE *opf = fopen(OUTPUT,"w");//以写方式打开 convert_work (ipf,opf); fclose (ipf); fclose (opf);}
头文件 convert.h
#ifndef __CONVERT_H__#define __CONVERT_H__#define INPUT "input.c"#define OUTPUT "output.c"enum { EOFSTAT,NULLSTAT,CSTAT,CPPSTAT};void convert_main ();#endif
测试代码
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<Windows.h>#include"convert.h"int main (void){ convert_main (); system ("pause"); return 0;}
在该项目的文件夹中创建一个 input文件,运行程序。文件列表中自动生成一个 output 文件。
该output文件就是 input 文件注释转换后的结果。
阅读全文
0 0
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 12小时制时钟
- delphi FMX图像的局部直方图均衡
- 队列(作业四)
- C#webApi
- STL--vector容器用法
- 注释转换
- X210v3S的BSP构建之uboot移植(一)
- selenium模拟浏览器爬人民网微博
- 指针那些事(算术运算、和数组的关系)
- Best Time to Buy and Sell Stock
- unity shader:非真实感渲染
- java 十进制转二进制、八进制、十六进制代码复用
- Java中servlet的实现过程
- ios 视频录制