注释转换 (将C注释转换为C++注释)
注释转换
注释转换 》 就是将代码中的注释转换为同一类的 , 比如是 C 语言 或者C++
C语言中 ,编译器默认的注释风格是 /* .........*/
C++中 ,编译器默认的注释风格是 // ....... 注释一行
要将 注释转化为 一致
这是一个很大的工程 ,因为你要将 其中的坑都要 考虑全面 。情况所有的j问题都要解决。
否则 ,得到的代码会是 很乱 的。
下面是我自己画的 不同注释的转换关系 》》》
下面是
常见的一些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++注释问题
- // /*xxxxxxxxxxxx*/
要想做到 ,就要做到精益求精 ,将所有情况都考虑好 。
我已经做到了 ,相信 你也不例外
代码附录
~~~~~~~~~~~头文件 .h~~~~~~~~~~~~~~~
- #pragma once//表示头文件被调用一次
- #include <stdio.h>
- #include <stdlib.h>
- enum STATE //定义一个枚举类型 表示 此时代码的状态
- {
- NUL,//无注释状态
- C,//C语言注释状态
- CPP,//C++注释状态
- END//代码结束状态
- };
- //执行转换函数
- void CommentConvert(FILE *pfin,FILE * pfout);//pfin 表示的是要读取的文件 ,pfout表示转换后输出的文件
- //无状态转换
- void DoNULConvert(FILE *pfin,FILE * pfout,enum STATE * state);
- //c状态转换
- void DoCConvert(FILE *pfin,FILE * pfout,enum STATE * state);
- //c++状态转换
- void DoCPPConvert(FILE *pfin,FILE * pfout,enum STATE * state);
~~~~~~~~~~源文件 .c~~~~~~~~~~~~
- #define _CRT_SECURE_NO_WARNINGS
- #include "CommentConvert.h"
- //执行转换函数
- void CommentConvert(FILE *pfin,FILE * pfout)
- {
- enum STATE state = NUL;//初始化状态 为 无注释状态
- while(state != END)//代码结束时跳出循环
- {
- switch(state)
- {
- case NUL://状态为无注释状态
- {
- DoNULConvert(pfin,pfout,&state);
- }
- break;
- case C://状态为C注释状态
- {
- DoCConvert(pfin,pfout,&state);
- }
- break;
- case CPP://状态为C++注释状态
- {
- DoCPPConvert(pfin,pfout,&state);
- }
- break;
- default:
- break;
- }
- }
- }
- //无状态转换
- void DoNULConvert(FILE *pfin,FILE * pfout,enum STATE * state)
- {
- int start = 0;
- int next = 0;
- start = fgetc(pfin);//从文件中读取一个字符 来判断
- switch( start)
- {
- case '/'://表示要进入注释状态
- {
- next = fgetc(pfin);//再从文件中读取一个字符 判断
- switch(next)
- {
- case '*'://表示代码是 /* 表示进入C语言注释状态
- {
- fputc('/',pfout);//j将它改为C++注释 输出到文件
- fputc('/',pfout);
- *state = C;//状态转换为 C注释状态
- }
- break;
- case '/'://表示代码是 // 表示进入C++注释状态
- {
- fputc(start,pfout);//将注释输出到文件
- fputc(next,pfout);
- *state = CPP; //状态转换为 C++注释状态
- }
- break;
- default: //表示这个'/ '是字符
- {
- fputc(start,pfout); //将读取到的字符输出到文件
- fputc(next,pfout);
- }
- break;
- }
- }
- break;
- case EOF://遇到EOF表示代码结束
- {
- fputc(start,pfout);//将EOF输到文件
- *state = END;//状态改为 END
- }
- break;
- default://表示遇到的不是注释 ,状态不变
- {
- fputc(start,pfout); //将读取的字符输出到文件
- }
- break ;
- }
- }
- //c状态转换
- void DoCConvert(FILE *pfin,FILE * pfout,enum STATE * state)
- {
- int start = 0;
- int next = 0;
- int then = 0;
- start = fgetc(pfin);//从文件中读取一个字符 来判断
- switch(start)//c注释状态 不会直接转换为END状态
- {
- case '*'://遇到'*'表示C语言注释状态 可能会结束
- {
- next = fgetc(pfin); //再重新 读取 一个字符
- switch(next)//判断
- {
- case '/'://表示 C语言注释 结束 但要判断之后是不是'\n',因为C++注释是以换行结束的
- {
- then =fgetc(pfin);//再重新 读取 一个字符
- if(then == '\n')//如果是'\n'
- {
- fputc(then,pfout);//输出
- }
- else
- {
- fputc('\n',pfout);//如果不是 ,我们要帮他换行
- ungetc(then,pfin);//并且要将用来判断的字符 从读取流中的撤销 ,防止下次判断时 少判断一个字符
- }
- *state = NUL;//状态装换为无注释状态
- }
- break;
- default :
- {
- fputc(start,pfout);
- ungetc(next,pfin);//将多余用来判断的字符撤销
- }
- break;
- }
- }
- break;
- case '\n'://换行之后要加上 // 因为C++只注释能一行
- {
- fputc(start,pfout);
- fputc('/',pfout);
- fputc('/',pfout);
- }
- break;
- default:
- fputc(start,pfout); //否则直接输出
- break;
- }
- }
- //c++状态转换
- void DoCPPConvert(FILE *pfin,FILE * pfout,enum STATE * state)
- {
- int start = 0;
- int next = 0;
- int then = 0;
- start = fgetc(pfin);//从文件中读取一个字符 来判断
- switch(start)
- {
- case '\n' ://表示 C++一行注释结束
- {
- fputc(start,pfout);
- *state = NUL;//状态改为无注释状态
- }
- break;
- default :
- fputc(start,pfout);
- break;
- }
- }
如果要是不明白 ungetc 函数 可以 点击看看 I/O系列函数
~~~~~~~~~~~~~~~~测试代码 test.c~~~~~~~~~~~~~~
- #define _CRT_SECURE_NO_WARNINGS
- #include "CommentConvert.h"//定义的头文件
- int main()
- {
- FILE *pfin = NULL;//定义两文件指针
- FILE *pfout= NULL;
- pfin = fopen("input.c","r");//打开 读取 的文件
- if(pfin == NULL )
- {
- perror("input file open:");//读取失败
- exit(EXIT_FAILURE);
- }
- pfout = fopen("output.c","w");//打开 要写入 的文件
- if(pfout ==NULL)
- {
- perror("output file open:");//读取失败
- fclose(pfin);//要将读文件关闭取的
- exit(EXIT_FAILURE);
- }
- CommentConvert(pfin,pfout);
- printf("转换成功\n");
- fclose(pfin);//关闭两文件
- fclose(pfout);
- system("pause");
- return 0 ;
- }<strong>
- </strong>
函数写的我好累 啊, 下午写一下 转化为 C语言注释的代码 有兴趣的 c++注释转为C注释
可以看看
转自: http://blog.****.net/wx_east/article/details/52180432
相关推荐
- 【C++学习笔记】超详细C++注释的使用方法,不赶紧收藏就错过啦!
- 小程序--注释转换(C to c++)
- 使用 rose 将 c++代码转换为 uml 类图
- c++ VQ矢量量化 LBG算法 代码实现 详细注释
- 软件公司面试题 用C++或Java删除文件中的注释 我来献丑了
- 用C语言实现从C到C++的注释转换
- 注释转换 (将C注释转换为C++注释)
- C++标准注释原则 - 基于doxygen的C++注释
- C、C++中的注释
- 使用doxygen对c++代码进行文档化注释
- 零基础学PYTHON_ffor,while 以及for和range组合
- ThinkPHP5远程代码执行高危漏洞(附:升级修复解决方法)