C和CPP注释转换
来源:互联网 发布:java iterator() 编辑:程序博客网 时间:2024/06/05 09:51
注释转换是将如下几种情况的注释分别按情况转换为相应注释风格
(将C注释转换为C++注释风格)
首先我们需要两个文件来分别存储需要修改的源码和修改之后的代码,这里我将文件创建在当前目录之下
注释转换的实现依据有限状态机编程思想,状态转换如下图所示:
下面是input.c文件内修改的源码的注释及需要转换的情况的说明
// 1.一般情况int num = 0;/*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++注释问题// /*xxxxxxxxxxxx*/
下面则是转换之后的注释风格,并写入了人文件output.c
// 1.一般情况int num = 0;//int i = 0;// 2.换行问题// int i = 0; int j = 0;// int i = 0; int j = 0;// 3.匹配问题//int i = 0; /*xxxx// 4.多行注释问题////int i=0;//int j = 0;//int k = 0;//int k = 0;// 5.连续注释问题////// 6.连续的**/问题//*// 7.C++注释问题// /*xxxxxxxxxxxx*/
以下为注释转换的代码实现部分,关于代码,请参考注释解读
AnnotationConversion.h
#define _CRT_SECURE_NO_WARNINGS 1#ifndef __ANNOTATION_CONVERSION_H__#define __ANNOTATION_CONVERSION_H__#include<stdio.h>#include<stdlib.h>typedef enum STATE{ NUL_STATE, C_STATE, CPP_STATE, END_STATE}STATE;void DoConversionWork(FILE *pfin, FILE *pfout);//状态转换,(有限状态机编程)void DoNulState(STATE *p, FILE *pfout, FILE *pfin);//空状态的操作void DoCState(STATE *p, FILE *pfout, FILE *pfin);//C注释状态操作void DoCppState(STATE *p, FILE *pfout, FILE *pfin);//C++注释状态操作#endif//__ANNOTATION_CONVERSION_H__
AnnotationConversion.c
#include"AnnotationConversion.h"void DoConversionWork(FILE *pfin, FILE *pfout){ STATE state = NUL_STATE;//状态置空 while(state != END_STATE)//判断此时状态 { switch (state) { case NUL_STATE: DoNulState(&state, pfout, pfin);//空状态的操作 break; case C_STATE: DoCState(&state, pfout, pfin);//C注释状态操作 break; case CPP_STATE: DoCppState(&state, pfout, pfin);//C++注释状态操作 break; default: break; } } printf("注释转换完成\n"); fclose(pfin); fclose(pfout);}void DoNulState(STATE *p, FILE *pfout, FILE *pfin){ int first = 0; first=fgetc(pfin); switch (first) { case '/': { int second = fgetc(pfin); switch (second) { case '*': { fputc('/',pfout); fputc('/',pfout);// 将'/*'转换为'//' *p = C_STATE;//状态重置为C_STATE } break; case '/': { fputc(first, pfout); fputc(second, pfout);//将"//"写入 *p = CPP_STATE; } break; default : fputc(first, pfout); fputc(second, pfout); break; } } break; case EOF: fputc(first, pfout); *p = END_STATE; break; default : fputc(first, pfout); break; }}void DoCState(STATE *p, FILE *pfout, FILE *pfin){ int first = 0; first = fgetc(pfin); switch (first) { case '*': { int second=fgetc(pfin); switch (second) { case '/': { int third = fgetc(pfin); if(third=='\n')//判断在注释结束后的'\n'问题 { fputc(third, pfout);//如果是换行,写入换行 } else { ungetc(third, pfin);//如果不是'\n',在本行后添加换行并写入 fputc('\n', pfout); } *p=NUL_STATE; } break; case '*': fputc(first, pfout);//遇到**/问题,将第一个'*'当正常代码写入 ungetc(second, pfin);//将第二个'*'返回流中,进行下次循环 break; default: fputc(first, pfout); break; } } break; case '\n': fputc(first, pfout);//多行注释问题,遇到'\n'将换行写入 fputc('/', pfout);//在下行写入'//' fputc('/', pfout); break; case EOF: { fputc(first, pfout); *p = END_STATE; //文件结束将状态切换为结束状态 } break; default : fputc(first, pfout); break; }}void DoCppState(STATE *p, FILE *pfout, FILE *pfin){ int first=fgetc(pfin); switch (first) { case '\n': { fputc(first, pfout); *p = NUL_STATE; } break; case EOF: { fputc(first, pfout); *p = END_STATE; } break; default : fputc(first, pfout); break; }}
若有不当之处,恳请留言指正
阅读全文
0 0
- C和CPP注释转换
- c注释转换为cpp注释
- C注释转换至CPP注释
- c的注释转换成cpp
- C到CPP的注释转换
- 把c语言注释转换为cpp注释
- 将c风格的注释转换成cpp风格
- IO注释转换---CPP风格
- 注释转换<C注释-->C++注释>
- c/c++注释转换
- 【C语言】注释转换
- C语言 注释转换
- 【C语言】注释转换
- C/C++注释转换
- 注释转换C->C++
- c语言注释转换(c注释转换成c++注释)
- 注释转换(C->C++)
- 注释转换(C---->C++)
- Ubuntu16 python scrapy爬虫框架安装
- QT5.8.0 vs2013平台更改程序运行icon图标
- 复制带有随机指针的链表
- 自定义dialog布局样式
- DATE区别DATETIME
- C和CPP注释转换
- Android多语言支持实现
- cocos 滑动条调节音量
- 关于restful协议很多人的误解
- Codeforces Round #417 (Div. 2) A. Sagheer and Crossroads
- mysql慢查询日志
- Wait/Notify
- 数据库导入与导出
- JPEG解码实验