C语言实现C到C++的注释转换
来源:互联网 发布:爱奇艺去广告优化版 编辑:程序博客网 时间:2024/05/22 14:18
C语言中的注释一般为/*......*/来标注,C++的注释一般为//来标注,为了完成注释的转换,我考虑了一下几种情:
1.一般情况
/* int i = 0; */
这是最通常的情况,当遇到/*时把其替换成//,遇到*/时直接跳过
2.换行问题
/* int i = 0; */int j = 0;
/* int i = 0; */
int j = 0;
如果存在换行,或者C语言中的注释没有换行,我们就要考虑,若注释后面有换行符,直接打印,若无,则加上换行符,再打印后面的内容
3.匹配问题
/*int i = 0;/*xxxxx*/
若注释内容存在/*,我们必须打印出来,为此,我定义了一个枚举变量State,用来判断内容是否存在注释内,便可以很好的解决
4.多行注释问题
/*
int i=0;
int j = 0;
int k = 0;
*/int k = 0;
如若内容存在注释内且有换行,那么一个//是不够把它都注释掉的,所以在内容内的换行之前,可以加上//
5.连续注释问题
/**//**/
解决完以上问题,因为我已经连续读取了3个字符,所以遇到连续注释的情况,只能转换第一个注释,并不能转换第二个注释,所以用fseek函数,将读取内容退回文件,防止出现纰漏。
6.连续的**/问题
/***/
这个问题与上一条类似,只是把第二个读取的字符退回就好了。
7.C++注释问题
// /*xxxxxxxxxxxx*/
如果这让,则单独判断是否注释前有C++注释,若有,则换行在转换C的注释,这样做比直接取消掉C的注释要好很多,如果//写有内容 /*xxxxxxxxxxxx*/,也可以让层次分得清楚。
代码如下:
#include <stdio.h>#include <errno.h>#include <assert.h>typedef enum Con_State{Con_SUCCESS,Con_FAIL}Con_State;typedef enum State{C_BEGIN,C_END}State;Con_State Convert(FILE*fout, FILE*fin){int flag = C_END;//匹配问题char first=0;char second=0;char next = 0;assert(fout);assert(fin);while ((first = fgetc(fout)) != EOF){switch (first){case '/':second = fgetc(fout);if ((second == '*')&&flag==C_END){flag = C_BEGIN;fputc('/', fin);fputc('/', fin);}else if (second == '/')//C++注释问题{fputc(first, fin);fputc(second, fin);fputc('\n', fin);}else{fputc(first, fin);fputc(second, fin);}break;case '\n'://多行注释问题if (flag == C_BEGIN){fputc(first, fin);fputc('/', fin);fputc('/', fin);}else{fputc(first, fin);}break;case '*':second = fgetc(fout);if ((second == '/')&&(flag==C_BEGIN)){flag = C_END;if (((next = fgetc(fout)) != '\n')&&(next!=EOF))//换行问题,连续注释问题{fputc('\n', fin);}fseek(fout, -1, SEEK_CUR);//连续的** / 问题}else{fputc(first, fin);fseek(fout, -1, SEEK_CUR);//连续的** / 问题}break;default:fputc(first, fin);break;}}return Con_SUCCESS;}Con_State annotaCon(){FILE* fout;FILE* fin;int ret = 0;fout = fopen("output.c", "r");if (fout == NULL){printf("打开%s失败error:%d\n", "output", errno);return Con_FAIL;}fin = fopen("input.c", "w");if (fin == NULL){printf("打开%s失败error:%d\n", "input", errno);fclose(fout);return Con_FAIL;}ret=Convert(fout, fin);fclose(fout);fclose(fin);return ret;}
如有什么不足之处,希望批评指正。
本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1725650
- 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到CPP的注释转换
- 注释转换(C到C++的注释转换)
- 实现c语言注释转换为c++注释
- 指针与数组的关联3 --声明
- 模拟实现C语言strncpy.strncat.strncmp函数
- C语言模拟实现memset.memcmp函数
- C语言用结构体写一个通讯录
- 提交Android代码的格式
- C语言实现C到C++的注释转换
- C语言实现顺序表的增删查改以及排序
- C++实现链表的进本操作及测试用例
- Android中的储存
- c++日期类的实现级运算符的重载
- C++复数类的运算符重载
- 用C语言实现二分查找算法
- 求最大公约数的设计与C语言实现
- String类的实现与深浅拷贝问题