【C语言】注释转换(C语言->C++)
来源:互联网 发布:linux当前文件路径 编辑:程序博客网 时间:2024/06/03 22:39
代码如下
.h文件
#ifndef __COMMENT_CONVERT__#define __COMMENT_CONVERT__#include <stdlib.h>#include <stdio.h>enum STATE{NUL_STATE,C_STATE,CPP_STATE,END_STATE,};void DoConvertWork(FILE *pfIn, FILE *pfOut);void DoNulState(FILE *pfIn, FILE *pfOut);void DoCState(FILE *pfIn, FILE *pfOut);void DoCppState(FILE *pfIn, FILE *pfOut);#endif
text.c文件
#include <stdlib.h>#include <Windows.h>#include "CommentConvert.h"void text(){FILE *pfIn = fopen("input.c", "r");if (NULL == pfIn){perror("open file for read");exit(EXIT_FAILURE);}FILE *pfOut = fopen("output.c", "a");if (NULL == pfOut){perror("open file for write");fclose(pfIn);exit(EXIT_FAILURE);}DoConvertWork(pfIn, pfOut);fclose(pfIn);fclose(pfOut);}int main(){text();system("pause");return 0;}CommentConvert.c文件
#include "CommentConvert.h"#include <assert.h>enum STATE state = NUL_STATE;void DoConvertWork(FILE *pfIn, FILE *pfOut){while (state != END_STATE){switch (state){case NUL_STATE:DoNulState(pfIn, pfOut);break;case C_STATE:DoCState(pfIn, pfOut);break;case CPP_STATE:DoCppState(pfIn, pfOut);break;default:break;}}}void DoNulState(FILE *pfIn, FILE *pfOut){assert(pfIn);assert(pfOut);int first = fgetc(pfIn);switch (first){case '/':{int second = fgetc(pfIn);if (second == '*') //如果第二个字符为'*',则为C语言注释{state = C_STATE;fputc(first, pfOut);fputc('/', pfOut);}else if (second == '/') //如果第二个字符为'/',则为CPP注释{state = CPP_STATE;fputc(first, pfOut);fputc(second, pfOut);}break;}case EOF:state = END_STATE;break;default:fputc(first, pfOut);break;}}void DoCState(FILE *pfIn, FILE *pfOut) //C语言注释转换{assert(pfIn);assert(pfOut);int first = fgetc(pfIn);switch (first){case '*':{int second = fgetc(pfIn); if (second == '/'){int third = fgetc(pfIn);switch (third){case '\n':fputc(third, pfOut); // 返回开始处继续寻找注释state = NUL_STATE;break;case '/': // 判断是否为连续C语言注释fputc('\n', pfOut);ungetc(third, pfIn);state = NUL_STATE;break;case EOF:state = END_STATE;break;default:fputc('\n', pfOut);fputc(third, pfOut);state = NUL_STATE;break;}}else if (second == '*') //处理注释行中多余*{fputc(second, pfOut);ungetc(second, pfIn);state = C_STATE;}else{fputc(first, pfOut);fputc(second, pfOut);state = C_STATE;}}break;case '\n': //判断多行注释fputc(first, pfOut);fputc('/' , pfOut);fputc('/', pfOut);break;default:fputc(first, pfOut);break;}}void DoCppState(FILE *pfIn, FILE *pfOut){assert(pfIn);assert(pfOut);int first = fgetc(pfIn);switch (first){case '\n': fputc(first, pfOut);state = NUL_STATE;break;case EOF:state = END_STATE;break;default:fputc(first, pfOut);break;}}
0 0
- 【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代码注释转换
- 15、spring自动扫描组件
- Recyclerview上拉加载下拉刷新
- leetcode463
- Minimum’s Revenge HDU5922 (水t)
- 环境变量
- 【C语言】注释转换(C语言->C++)
- Python PIL: cannot write mode RGBA as BMP
- 页面置换算法
- 谨慎能捕千秋蝉(三)——界面操作劫持与HTML5安全
- POJ 3186 Treats for the Cows
- Servlet+JSP+JavaBean+C3P0数据库连接池---本科生教务管理系统
- JS前端面试题-总结01
- idea出现:Server is not connected. Deploy is not available
- Leetcode 289 - Game of Life(array)