注释转换(c语言注释转为c++注释)
来源:互联网 发布:mysql数据文件路径 编辑:程序博客网 时间:2024/06/03 19:33
在我们的C/C++的项⽬目当中会有C、C++两种注释⻛风格,有时为了方便,会将注释全部转为同一种,我这里做的是将c语言风格注释转为c++注释;
c注释为:/int i=1;/
c++注释为://int i=1;
因为在注释转换中有很多情况需要考虑周全,所以可通过下图的梳理来一步步实现代码
接下来就是代码部分,首先是头文件“convert.h”
#ifndef __CONVERT_H__#define __CONVERT_H__#include<stdio.h>#include<stdlib.h>enum { NULSTAT, CSTAT, CPPSTAT, EOFSTAT };//分别定义四种状态:无注释状态,c注释,c++注释,文件结束状态#define INPUT "input.c"//定义输入文件#define OUTPUT "output.c"//定义输出文件static void convert_work(FILE *ipf, FILE *opf);//定义两个指针分别指向文件内容void do_null_stat(FILE*ipf, FILE*opf);//无注释状态void do_cpp_stat(FILE*ipf, FILE*opf);//c++状态void do_c_stat(FILE *ipf, FILE *opf);//c状态void convert_main();//测试函数#endif __CONVERT_H__
源文件”convert.c”:
#define _CRT_SECURE_NO_WARNINGS 1#include"convert.h"static int status = NULSTAT;void do_null_stat(FILE*ipf, FILE*opf)//无注释状态{ int c = fgetc(ipf);//从input.c中取一个字符,进行判断 switch (c) { case'/'://进入注释状态 { int s = fgetc(ipf);//取c的下一个字符,判断 switch (s) { case'*': // 表示"/*" ,c语言注释状态,改为c++状态 fputc('/', opf); fputc('/', opf); status = CSTAT; break; case'/': // 表示"//",c++状态 fputc('/', opf); fputc('/', opf); status = CPPSTAT; break; default: //表示'/'是字符,输出c、s fputc(c, opf); fputc(s, opf); status = NULSTAT; break; } }break; case EOF: //遇到文件结束状态,输出字符 fputc(c, opf); status = EOFSTAT; default: fputc(c, opf); break; }}void do_c_stat(FILE *ipf, FILE *opf)//c注释状态{ int c = fgetc(ipf); switch (c) { case'*': //c注释状态,判断下一个字符 { int s = fgetc(ipf); switch (s) { case'/': //c语言注释状态结束,判断后面的字符是不是换行符 { int r = fgetc(ipf);//再取一个字符 if (r == '\n') { fputc(r, opf);//是换行符则输出字符 } else fputc('\n', opf);//不是,则添加一个换行符,并将r字符退回去 ungetc(r, ipf);// ungetc功能是把一个或多个字符退回输入流中,不能是输出流 status = NULSTAT; break; default: fputc(c, opf); ungetc(s, ipf); break; } } }break; case'\n':// 换行之后加上 // ,因为c++只能注释一行 fputc(c, opf); fputc('/', opf); fputc('/', opf); break; default: fputc(c, opf); break; }}void do_cpp_stat(FILE*ipf, FILE*opf) //c++注释状态{ int c = fgetc(ipf); switch (c) { case'\n': //表示一行注释结束,输出字符,到无注释状态 fputc(c, opf); status = NULSTAT; default: fputc(c, opf); break; }}static void convert_work(FILE *ipf, FILE *opf)//工作状态,根据不同情况进行选择{ while (status != EOFSTAT) { switch (status) { case NULSTAT: do_null_stat(ipf, opf); break; case CPPSTAT: do_cpp_stat(ipf, opf); break; case CSTAT: do_c_stat(ipf, opf); break; default: printf("ERROR!!!"); break; } }}void convert_main()//写入输入文件,并判断是否为空{ FILE *ipf = NULL; FILE *opf = NULL; ipf = fopen("input.c", "r");//打开读取文件 if (ipf == NULL)//若文件为空 { perror("input file open: ");//读取文件失败 exit(EXIT_FAILURE); //EXIT_FAILURE是"stdlib.h"头文件中定义的一个符号常量,表示执行一个程序失败,EXIT_SUCCESS表示执行一个程序成功;二者均可作为exit()的参数使用 } opf = fopen("output.c", "w");//打开输出文件 if (opf == NULL) { perror("output file open: "); fclose(ipf); exit(EXIT_FAILURE); } convert_work(ipf, opf); fprintf(opf, "%s\n"); printf("转换成功\n"); fclose(ipf);//关闭两个文件 fclose(opf);}
主函数main()
#define _CRT_SECURE_NO_WARNINGS 1#include"convert.h"int main(){ convert_main(); return 0;}
以上就是我所实现的代码程序,接下来可写入输入文件input.c
// 1. 一般情况 int num = 0; /* int i = 0; */// 2. 换行问题 /* int i = 0; */int j = 0; /* int i = 0; */ int m = 0;// 3. 匹配问题 /*int i = 0;/*xxxxx*/// 4. 多⾏注释问题 /* int i=0; int j = 0; int k = 0; */int k = 0;// 5. 连续注释问题 //int a = 0; //int b = 0;// 6. 连续的 **/ 问题 //*// 7.C++ 注释问题 // /*xxxxxxxxxxxx*/
接下来就是执行程序,成功后可在文件资源管理器中查看输出文件”output.c”,看输出结果是否符合预期,下面是我的输出文件:
// 1. 一般情况 int num = 0; // int i = 0; // 2. 换行问题 // int i = 0; int j = 0; // int i = 0; int m = 0;// 3. 匹配问题 //int i = 0;/*xxxxx// 4. 多⾏注释问题 // int i=0; //int j = 0; //int k = 0; int k = 0;// 5. 连续注释问题 //int a = 0; //int b = 0;// 6. 连续的 **/ 问题 //*// 7.C++ 注释问题 // /*xxxxxxxxxxxx*/
可见是符合转换要求的。
在写程序的过程中最需要注意的是细节!细节!细节!细节!细节!…………
重要的事说上不止三遍
阅读全文
0 0
- 注释转换(c语言注释转为c++注释)
- 注释转换(c语言注释转为c++注释)
- c语言实现注释转换(c转为c++)
- 【C语言】注释转换
- C语言 注释转换
- 【C语言】注释转换
- c语言注释转换(c注释转换成c++注释)
- C++注释转换成C语言注释
- c语言注释转换成c++注释
- [注释转化]C语言注释转换为C++语言注释
- 注释转换(C语言->C++)
- 注释转换(c语言->c++)
- C语言小项目—注释转换( C注释转换为C++注释 )
- C语言项目:注释转换(C风格注释转换成C++风格注释)
- 注释转换(c风格转为c++风格)
- c语言项目-注释转换
- 【C语言项目】注释转换
- C语言实现注释转换
- websocket-shrap源码阅读
- Python学习笔记(2)——print
- 针对不同浏览器,进行附件名的编码
- LeetCode-268. Missing Number
- [转]sublime text 3 快捷键大全
- 注释转换(c语言注释转为c++注释)
- SSH for 码云
- 进制转换
- 对BFC规范的理解?
- Java工厂模式之简单工厂模式
- ios-RunLoop使tableView流畅化
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- C# 数据类型
- BZOJ2659: [Beijing wc2012]算不出的算式