c/c++注释转换
来源:互联网 发布:今日头条数据图 编辑:程序博客网 时间:2024/05/20 17:09
C语言与c++有着不同的注释方式,所以我进行了将c的注释转换成c++的注释
CommentConvert.h文件#define _CRT_SECURE_NO_WARNINGS 1#ifndef __COMMENT_H__#define __COMMENT_H__#include <stdio.h>#include <stdlib.h>enum STATE{ NUL_STATE, C_STATE, CPP_STATE, END_STATE};void DoCState(FILE* pfIn, FILE* pfOut);void DoCppState(FILE* pfIn, FILE* pfOut);void DoNulState(FILE* pfIn, FILE* pfOut);void DoConvertWork(FILE* pfIn, FILE* pfOut);#endif //__COMMENT_H__
CommentConvert.c文件#define _CRT_SECURE_NO_WARNINGS 1#include "CommentConvert.h"static 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 CommentConvert(){ FILE* pfWrite = NULL; FILE* pfRead = NULL; pfRead = fopen("input.c", "r"); if (pfRead == NULL) { perror("open file for read"); return; } pfWrite = fopen("output.c", "w"); if (pfWrite == NULL) { perror("open file for write"); fclose(pfRead); return; } DoConvertWork(pfRead, pfWrite); fclose(pfRead); fclose(pfWrite);}void DoNulState(FILE* pfIn, FILE* pfOut){ int first = fgetc(pfIn); switch (first) { case '/': { int second = fgetc(pfIn); switch (second) { case '*': fputc(first, pfOut); fputc('/', pfOut); state = C_STATE; break; case'/': fputc(first, pfOut); fputc('/', pfOut); state = CPP_STATE; break; case EOF: fputc(first, pfOut); state = END_STATE; break; default: fputc(first, pfOut); fputc(second, pfOut); } } break; case EOF: fputc(first, pfOut); state = END_STATE; break; default: fputc(first, pfOut); break; }}void DoCState(FILE* pfIn, FILE* pfOut){ int first = fgetc(pfIn); int second = 0; switch (first) { case '*': second = fgetc(pfIn); if (second == '/') { int third = fgetc(pfIn); state = NUL_STATE; if (third != '\n') { fputc('\n', pfOut); ungetc(third, pfIn);//将已读数据还给缓冲区 } if (third == '\n') { fputc(third, pfOut); } } else { fputc(first, pfOut); ungetc(second, pfIn);//将*之后的内容还回缓冲区; } break; case '\n'://换行,连续注释,就将下一行开头加入Cpp注释; fputc(first, pfOut); fputc('/', pfOut); fputc('/', pfOut); break; case EOF: fputc(first, pfOut); state = END_STATE; break; default: fputc(first, pfOut); break; }}void DoCppState(FILE* pfIn, FILE* pfOut){ int first = fgetc(pfIn); switch (first) { case'\n'://Cpp注释的换行就是一行注释的结束; fputc(first, pfOut); state = NUL_STATE; break; case EOF: fputc(first, pfOut); state = END_STATE; break; default: fputc(first, pfOut); break; }}
test.c文件#define _CRT_SECURE_NO_WARNINGS 1#include "CommentConvert.h"void test(){ CommentConvert();}int main(){ test(); system("pause"); return 0;}
结果对比如下:
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注释转换为C++注释)
- 注释转换(C注释转换为c++注释)
- 对spring web启动时IOC源码研究
- SpringBoot入门系列:Spring Security 和 Angular JS(1)
- Google Papers学习笔记 --- GigTable 中 SSTable 与 tablet的理解
- Java 日期时间
- FTP主动模式和被动模式的区别
- c/c++注释转换
- solr亿万级索引优化实践(二)
- PHP+yaml 示例
- requests从api中获取数据并存放到mysql中
- DNS 介绍
- vue在iis服务器上部署时出现找不到json文件错误
- 学习记录
- NTP时间服务器
- ADMM