码迷,mamicode.com
首页 > 编程语言 > 详细

c语言走向c++的第一步,注释转换

时间:2016-04-08 20:10:28      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:c语言注释转换为c++注释

最近刚开始学习c++,接触了一个小项目,写一个程序将C语言的注释转化为c++的注释,这个里面也要分很多种情况,下面我就把我做的小程序分享出来,在把C语言注释转化为c++注释的过程中,列举了以下几种情况 1.普通情况 /*int i = 0; 2.换行问题 /*int i = 0;*/int j = 0; /*int i = 0;*/ int j = 0; 3.匹配问题 /*int i = 0;/*xxxxx*/ 4.多行注释 /*int i = 0; int j = 0; int k = 0; */int k = 0; 5.连续注释 /**//**/ 6.连续的**/问题 /***/ 7.c++注释问题 // /*xxxxxxxxxxx*/ 下面就分情况处理一下这几种情况 首先,你要成功创建一个文件并能够把C语言的注释写进去 void AnnotationConvert(const char* inputFile, const char* outputFile) { FILE* fIn = fopen(inputFile, "r");//用只读的方式打开一个文件 //检测文件是否打开成功,并输出错误码 //只读方式打开文件失败,有可能是文件不存在或路径错误等问题 if (fIn == NULL) { printf("打开文件%s失败,errno:%d", inputFile,errno); return; } //写方式打开文件失败,这是要注意关闭已打开的fIn,否则可能导致内存泄漏等问题 FILE* fOut = fopen(outputFile, "w"); if (fOut == NULL) { fclose(fIn);//关闭文件流 printf("打开文件%s失败,errno:%d", outputFile,errno); return; } Convert(fIn, fOut); //打开文件成功,要注意关闭文件流 fclose(fIn); fclose(fOut); } 在这里,可以定义两个枚举常量用来判断是c语言注释的开始还是结束 typedef enum State { C_BEGIN, C_END, }State; void Convert(FILE* fIn, FILE*fOut) { //断言文件流 assert(fIn); assert(fOut); char first, second;//读取两个字符 State tag = C_END; do { first = fgetc(fIn); switch (first) { //1.普通情况 /*int i = 0;*/ case‘/‘: second = fgetc(fIn); if (second == ‘*‘)//当读取的第一个字符为/第二个字符为*时 { //3.匹配问题/*int i = 0;/*xxxxx*/ if (tag == C_END)//判断是否上一个C语言注释已结束,即一个C语言注释的开始, //若是,转化为c++注释的开始 { fputc(‘/‘, fOut); fputc(‘/‘, fOut); tag = C_BEGIN; } else //若不是,按原样输出 { fputc(‘/‘, fOut); fputc(‘*‘, fOut); } } //7.c++注释问题 // /*xxxxxxxxxxx*/ else if (second == ‘/‘) //当读取的第一个字符为/且第二个字符也为/ { fputc(‘/‘, fOut); //按原样输出 fputc(‘/‘, fOut); char next; do { next = fgetc(fIn); //读取第三个字符并输出它 fputc(next, fOut); } while (next != ‘\n‘ && next != EOF); } else { fputc(first, fOut); fputc(second, fOut); } break; case‘*‘: second = fgetc(fIn); if (second == ‘/‘) //当第一个字符为*第二个字符为/时输出一个换行 { char next = fgetc(fIn); //5.多行注释 /**//**/ fputc(‘\n‘, fOut); if (next == ‘/‘) //当读取的第三个字符也为/时,倒退读取一个字符判断是否为多行注释的问题 { fseek(fIn, -1, SEEK_CUR);//倒退读取 } //2.换行问题/*int i = 0;*/intj = 0; else if (next != ‘\n‘&& next != EOF) //当读取的第三个字符不为换行不是/且不是文件结束的标志时,输出第三个字符 { fputc(next, fOut); } else { fputc(‘\n‘, fOut); } tag = C_END; //C语言注释的结尾,将用作标志的枚举常量置为end } //6.连续的**/问题 /***/ else if (second == ‘*‘) //当读取的第二个字符为*时,输出第一个字符且倒退读取一个字符 { fputc(first, fOut); fseek(fIn, -1, SEEK_CUR); } else { fputc(first, fOut); fputc(second, fOut); } break; case‘\n‘: // 4.多行注释 /*int i = 0; int j = 0; int k = 0; */int k = 0; //当读取到的第一个字符为换行时首先输出一个换行 fputc(‘\n‘, fOut); if (tag == C_BEGIN) //判断是否为一个C语言注释的开始,若是,进行转化 { fputc(‘/‘, fOut); fputc(‘/‘, fOut); } break; default: fputc(first, fOut); break; } }while (first != EOF); //读取到的字符不是文件结束 } 这样子一个注释转换的小项目就基本完成了

本文出自 “11423494” 博客,请务必保留此出处http://11433494.blog.51cto.com/11423494/1761891

c语言走向c++的第一步,注释转换

标签:c语言注释转换为c++注释

原文地址:http://11433494.blog.51cto.com/11423494/1761891

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!