c注释风格转化到c++注释风格
2017-05-30 17:21
501 查看
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*/
CommentConvert.h
#pragma once #include <stdio.h> #include <stdlib.h> typedef enum Convert_State//定义状态 { NULL_STATE, C_STATE, CPP_STATE, END_STATE }StateType; void CommentConvert(); void DoConvertWork(FILE *read, FILE *write); void Null_Convert(FILE *read, FILE *write); void C_Convert(FILE *read, FILE *write); void Cpp_Convert(FILE *read, FILE *write);
CommentConvert.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "CommentConvert.h" StateType state;//state定义为全局变量 void CommentConvert() { FILE *pwrite = NULL; FILE *pread = fopen("input.c", "r"); if(pread == NULL) { perror("open file for read"); exit(EXIT_FAILURE); } pwrite = fopen("output.c", "w"); if(pwrite == NULL) { fclose(pread); perror("open file for write"); exit(EXIT_FAILURE); } DoConvertWork(pread, pwrite); fclose(pread); fclose(pwrite); } void DoConvertWork(FILE *read, FILE *write) { state = NULL_STATE;//初值赋为无状态 while(state != END_STATE) { switch(state) { case NULL_STATE: Null_Convert(read, write); break; case C_STATE: C_Convert(read, write); break; case CPP_STATE: Cpp_Convert(read, write); break; default: break; } } } void Null_Convert(FILE *read, FILE *write) { int first = fgetc(read); int second = 0; switch(first) { case '/': { second = fgetc(read); if(second == '*') { fputc(first, write); fputc('/', write); state = C_STATE; } else if(second == '/') { fputc(first, write); fputc(second, write); state = CPP_STATE; } else { fputc(first, write); fputc(second, write); } } break; case EOF: fputc(first, write); state = END_STATE; break; default: fputc(first, write); break; } } void C_Convert(FILE *read, FILE *write) { int first = fgetc(read); int second = 0; int third = 0; switch(first) { case '\n': fputc('\n', write); fputc('/', write); fputc('/', write); break; case '*': { second = fgetc(read); if(second == '/') { third = fgetc(read); if(third == '\n') { fputc('\n', write); } else { fputc('\n', write); ungetc(third, read);//在c注释风格最后判断为非\n要 } state = NULL_STATE; } else if(second == '*') { fputc(first, write); ungetc(second, read);//把读取到的'*'字符退回到输入流中 } else { fputc(first, write); } } break; default: fputc(first, write); break; } } void Cpp_Convert(FILE *read, FILE *write) { int first = fgetc(read); int second = 0; switch(first) { case '\n': fputc(first, write); state = NULL_STATE; break; case EOF: fputc(first, write); state = END_STATE; break; default: fputc(first, write); break; } }
test.c
#include "CommentConvert.h" int main() { CommentConvert(); system("pause"); return 0; }
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*/
相关文章推荐
- C注释风格转化为C++风格注释
- C注释风格转化为C++风格注释
- 注释风格转换(从C语言注释风格转换到C++注释风格)
- C++风格的注释
- 小项目:简单注释转换(C风格转到C++风格)
- 改善C++ 程序的150个建议学习之建议22:灵活地使用不同风格的注释
- 条款3,4:尽量用new和delete而不用malloc和free 尽量使用c++风格的注释
- 条款4:尽量使用c++风格的注释
- 注视转换 将C风格注释转换为C++风格
- 小项目-C语言注释转化为C++注释
- C/C++ 学习笔记[03].去掉C风格的注释
- C语言注释转化为C++注释(C语言实现)
- 条款4:尽量使用c++风格的注释
- C++ 注释风格(实例)
- 用C/C++进行注释转化
- xcode自定义编写插件----改变c++/c注释风格
- 如何使GCC能够处理双斜线注释(C++风格注释)?
- 一个滤掉C/C++风格的注释的片段
- Effective C++:条款4:尽量使用c++风格的注释
- C++注释转化为C语言注释