标签:注释转换 fseek inputfile c到c++注释转换
http://blog.csdn.net/fujinlong520/article/details/46573445注释转换 ——C++注释转换为标准C语言注释
直接上代码:
<span style="color:#ff0000;"> #include<stdio.h> #include <errno.h> #include <assert.h> typedef enum STATE { SUCCESS, // 转换成功 FILE_ERROE, // 文件错误 NO_MATCH, // 不匹配 OTHER, // 其他错误 }STATE; typedef enum TAG { TAG_BEGIN, // 在C注释段中 TAG_END, // C注释结束 }TAG; #pragma warning(disable:4996) STATE AnnotationConvert(FILE* inFile, FILE* outFile) { TAG tag = TAG_END; char firstCh, secondCh; assert(inFile); assert(outFile); do{ firstCh = fgetc(inFile); switch (firstCh){ case '/': secondCh = fgetc(inFile); if (secondCh == '*'&& tag == TAG_END) { fputc('/', outFile); fputc('/', outFile); tag = TAG_BEGIN; } else if(secondCh == '*'&& tag != TAG_END) { fputc(' ', outFile); fputc(' ', outFile); tag = TAG_BEGIN; } else if(secondCh == '/') { char nextCh; fputc('/', outFile); fputc('/', outFile); do { nextCh = fgetc(inFile); fputc(nextCh, outFile); }while ( nextCh != '\n'&& nextCh != '/'); if(nextCh == '/') { char next; next = fgetc(inFile); if(next =='/'||next == '*' ) { fputc(' ', outFile); fputc(' ', outFile); } } //tag = TAG_END; } else { fputc(firstCh, outFile); fputc(secondCh, outFile); } break; case '\n': // fputc('\n', outFile); fputc(firstCh, outFile); if (tag == TAG_BEGIN)//多行注释问题 { fputc('/', outFile); fputc('/', outFile); } break; case '*': secondCh = fgetc(inFile); if (secondCh == '/') { char next = fgetc(inFile); if (next != '\n' && next != EOF) { fputc('\n', outFile); if(next != '/') { fputc(next,outFile); } tag = TAG_BEGIN; } if (next == EOF) { firstCh = EOF; } if(next == '/')//连续注释问题 { //fputc(' ', outFile); // fputc(' ', outFile); //fputc('\n', outFile); //firstCh = next; fseek(inFile, -1, SEEK_CUR);//返到上一个字符 //tag = TAG_BEGIN; } tag = TAG_END; } else if(secondCh != '/') { fputc(firstCh,outFile); } else { fputc(firstCh, outFile); fputc(secondCh, outFile); } break; default: fputc(firstCh, outFile); break; } }while(firstCh != EOF); if(tag == TAG_END) { return SUCCESS; } else { return NO_MATCH; } } int StartConvert() { STATE s; const char* inFileName = "input.c"; const char* outFileName = "output.c"; FILE* inFile = fopen(inFileName, "r"); FILE* outFile = fopen(outFileName, "w"); if (inFile == NULL) { return FILE_ERROE; } if (outFile == NULL) { fclose(inFile); return FILE_ERROE; } s = AnnotationConvert(inFile, outFile); fclose(inFile); fclose(outFile); return s; } int main() { STATE ret = StartConvert(); if (ret == SUCCESS) { printf("转换成功\n"); } else if (ret == NO_MATCH) { printf("不匹配\n"); } else if (ret == FILE_ERROE) { printf("文件错误: %d\n", errno); } else { printf("其他错误: %d\n", errno); } return 0; } </span>
inFile文件
// 1.一般情况
/* int i = 0; */
// 2.换行问题
/* 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++注释问题
// /*xxxxxxxxxxxx*/
//8.aaa
aa
转换后文件:
// 1.一般情况
// int i = 0;
// 2.换行问题
// 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++注释问题
// / xxxxxxxxxxxx
//8.aaa
aa?
标签:注释转换 fseek inputfile c到c++注释转换
原文地址:http://blog.csdn.net/fujinlong520/article/details/46581645