C语言注释转化为C++注释(C语言实现)
2017-07-29 23:09
591 查看
/* int a=0;*/是C语言注释风格,而我们都知道C语言这样的注释是有缺陷的(不能嵌套注释),为了弥补这一缺陷,可将C语言注释风格改为C++注释风格(//int a=0;).本文就来讲一下怎么运用C语言实现C注释转化为C++注释。
在一段代码中,往往会出现很多种情况,先来讨论一下可能存在的情况。
看图:(NUL代表正常情况,END代表结束)
请看具体代码:
头文件及函数声明(ComentConvert.h)部分
具体函数实现ConmentConvert.c部分
注释转换前后的对比:
PS:欢迎大家提出宝贵意见
在一段代码中,往往会出现很多种情况,先来讨论一下可能存在的情况。
看图:(NUL代表正常情况,END代表结束)
请看具体代码:
头文件及函数声明(ComentConvert.h)部分
#define _CRT_SECURE_NO_WARNINGS #ifndef __COMMENT_CONVER_H__ #define __COMMENT_CONVER_H__ #include <stdio.h> #include <stdlib.h> enum STATE { END_STATE, NUL_STATE, C_STATE, CPP_STATE }; void DoNulState(FILE* pfIn, FILE* pfOut, enum STATE *s);//处理正常情况 void DoCState(FILE* pfIn, FILE* pfOut, enum STATE *s);//处理C语言注释部分 void DoCPPState(FILE* pfIn, FILE* pfOut, enum STATE *s);//处理C++注释部分 #endif//__COMMENT_CONVER_H__
具体函数实现ConmentConvert.c部分
#define _CRT_SECURE_NO_WARNINGS #include "ComentConvert.h" void DoNulState(FILE* pfIn, FILE* pfOut, enum STATE *s) { int first = 0; first = fgetc(pfIn); switch (first) { case '/': { int second = 0; second = fgetc(pfIn); switch (second) { case '/': fputc(first, pfOut); fputc(second, pfOut); *s = CPP_STATE; break; case '*': fputc(first, pfOut); fputc(first, pfOut); *s = C_STATE; break; default: fputc(first, pfOut); fputc(second, pfOut); break; } } break; case EOF: *s = END_STATE; break; default: fputc(first,pfOut); break; } } void DoCState(FILE* pfIn, FILE* pfOut, enum STATE *s) { int first = 0; first = fgetc(pfIn); switch (first) { case '*': { int second = 0; second = fgetc(pfIn); switch (second) { case '*': ungetc(second, pfIn); fputc(second, pfOut); break; case '/': fputc('\n', pfOut); *s = NUL_STATE; break; default: fputc(first, pfOut); fputc(second, pfOut); break; } } break; case '\n': fputc(first, pfOut); fputc('/', pfOut); fputc('/', pfOut); break; default: fputc(first, pfOut); break; } } void DoCPPState(FILE* pfIn, FILE* pfOut, enum STATE *s) { int first = 0; first = fgetc(pfIn); switch (first) { case EOF: *s = END_STATE; break; default: fputc(first, pfOut); *s = NUL_STATE; break; } }
#include "ComentConvert.h" void test() { FILE* pfIn = NULL; FILE* pfOut = NULL; pfIn = fopen("input.c", "r"); if (pfIn == NULL) { perror("open a file for read"); exit(EXIT_FAILURE); } pfOut = fopen("output.c", "w"); if (pfOut == NULL) { perror("open a file for write"); fclose("input.c"); exit(EXIT_FAILURE); } enum STATE state=NUL_STATE; while (state!=END_STATE) { switch (state) { case NUL_STATE: DoNulState(pfIn, pfOut, &state); break; case C_STATE: DoCState(pfIn, pfOut, &state); break; case CPP_STATE: DoCPPState(pfIn, pfOut, &state); break; } } } int main() { test(); return 0; }
注释转换前后的对比:
PS:欢迎大家提出宝贵意见
相关文章推荐
- C/C++语言实现十进制正整数转化为2-16进制的数并输出
- 删除C/C++中的注释-有限状态机(C语言实现)
- C语言:C语言注释转换C++,注释转化项目C-->C++注释
- 小项目-C语言注释转化为C++注释
- 用C语言实现 C到C++的注释转换
- c语言实现注释转换(c转为c++)
- 实现C++注释转换为标准C语言注释
- c语言实现Java语言中contains函数
- C++类型转化,语言基础
- c语言原生实现MD5 不含c++的任何api
- 一个c语言源码转化为机器语言的过程
- 软件设计师教程 数据结构之循环队列的实现 (C/C++语言)
- C语言实现C++ 中的类
- 快速排序的Java语言与C语言实现
- 一个日历问题的C语言,C++(boost),python,Javascript,Java和Matlab的实现
- C语言中实现通用双链表(类似C++模版的功能)
- C++ 语言实现 BP 神经网络实例,手把手一句一句敲代码实现训练学习,模式识别 - (1)
- 程序目的:实现c++整型和字符数组,字符串的相互转化
- C/C++语言实现K均值(C均值)聚类算法