c注释转换成c++注释

原创 2016年05月30日 10:46:49

对于代码来说注释是非常重要的,因为这样可以提高自己写的代码的刻度性,现在实现c转换成c++注释的功能,可以将眼花缭乱的注释方式总结成8个种类,分别是:

// 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*/


// 8.C注释本身不匹配

/* int i = 0;

对于这8中情况我们可以采用状态机的方式编程,里面设置C_BEGIN,C_END,CPP_BEGIN,CPP_END这几种状态,然后一次性读取两个字符来决定将无状态切换至相应状态。

代码实现:

///////////////////////////////////////////////////////////////////////////////////////

int main()
{
	ConvertState ret;
	ret=NoteConvert("input.c","output.c");
	if (ret == SUCCESS)
	{
		printf("转换成功\n");
	}
	else if (ret == FAIL)
	{
		printf("转换失败\n");
	}
	else
	{
		printf("不匹配\n");
	}
	system("pause");
	return 0;
}


////////////////////////////////////////////////////////////////////////////////////////

#pragma once
#include <stdio.h>
#include <errno.h>
typedef enum ConvertState
{
	SUCCESS,
	FAIL,
	NO_MATCH,
}ConvertState;
typedef enum State
{
	C_BEGAIN,
	C_END,
	CPP_BEGAIN,
	CPP_END,
}State;
ConvertState Convert(FILE *fIn, FILE *fOut)
{
	ConvertState ret=SUCCESS;
	State tag = C_END;
	char first;
	char second='a';
	do{
		first = fgetc(fIn);
		switch (first)
		{
		case '/':
			second = fgetc(fIn);
			if (second == '*')
			{
				if (tag == C_END)
				{
					fputc('/', fOut);//1.一般问题
					fputc('/', fOut);
					tag = C_BEGAIN;//3.匹配问题
				}
				else
				{
					fputc('/', fOut);
					fputc('*', fOut);
				}
			}
			else if (second == '/')//7.c++注释问题   // /*xxxxxxxxxxxx*/
			{
				char nextNEXT;
				fputc('/', fOut);
				fputc('/', fOut);
				tag = CPP_BEGAIN;
				do{
					nextNEXT = fgetc(fIn);
					fputc(nextNEXT, fOut);		
				} while (nextNEXT != '\n'&&nextNEXT != EOF);
				tag = CPP_END;
			}
			break;
		case'\n'://4.多行注释问题
			if (tag == C_BEGAIN)
			{
				fputc('\n', fOut);
				fputc('/', fOut);
				fputc('/', fOut);
			}
			else
			{
				fputc('\n', fOut);
			}
			break;
		case '*':
			second = fgetc(fIn);
			if (second == '/')
			{
				char next=fgetc(fIn);
				if (next == '/')// 5.连续注释问题/**//**/
				{
					fputc('\n', fOut);
					fseek(fIn, -1, SEEK_CUR);
				}
				else if (next != '\n'&&next!=EOF)//2.换行问题
				{
					fputc('\n', fOut);
					fputc(next, fOut);
				}
				else
				{
					fputc('\n', fOut);
				}
				tag = C_END;
			}
			else if (second == '*')// 6.连续的**/问题 /***/
			{
				fputc(first, fOut);
				fseek(fIn, -1, SEEK_CUR);
			}
			else
			{
				fputc(first, fOut);
				fputc(second, fOut);
			}
			break;
		default:
			fputc(first, fOut);
			break;
		}
	} while (first != EOF);
	if (ret != C_END)
	{
		ret = NO_MATCH;
	}
	return ret;
}
ConvertState NoteConvert(char *inputFile, char *outputFile)
{
	ConvertState ret;
	FILE *fIn = fopen(inputFile, "r");
	FILE *fOut = fopen(outputFile, "w");
	if (fIn == NULL)
	{		
		printf("打开文件失败\n");
		printf("errno:%d\n",errno);
		perror("perror says open failed");
		return;
	}
	if(fOut== NULL)
	{
		fclose(fIn);
		printf("打开文件失败\n");
		perror("perror says open failed");		
		return;
	}
	ret=Convert(fIn,fOut);
	fclose(fIn);
	fclose(fOut);  
}



这种方式称为状态机编程,对于有很多情况且比较混乱的情况是可以采用这种方式。

本文出自 “anser” 博客,请务必保留此出处http://674353165.blog.51cto.com/10786549/1743406

版权声明:本文为博主原创文章,未经博主允许不得转载。

注释转换(C注释风格-C++注释风格)

注释一般来讲有分为两种: 一是单行注释:直接在该行需要注释的地方加上”//”就行 如:// int a=0; int b=0; //定义一个变量 另外还有一种是多行同时注释(不能...
  • dove1202ly
  • dove1202ly
  • 2017年07月30日 12:31
  • 286

C++注释转换成C语言注释

(一)项目背景 有些平台不能识别C++的注释,而有些程序员又钟情于C++注释,为此我们需要写程序达到自动化的转换。 (二)整体思路。 核心思想其实就是状态机。而这个状态机实际上就是一个含有枚举类...
  • renchunlin66
  • renchunlin66
  • 2016年05月13日 22:54
  • 290

c/c++注释转换

C语言与c++有着不同的注释方式,所以我进行了将c的注释转换成c++的注释CommentConvert.h文件 #define _CRT_SECURE_NO_WARNINGS 1 #ifndef __...
  • wpeaceminusone
  • wpeaceminusone
  • 2017年03月14日 14:30
  • 158

C\C++注释风格转换(段注释转换为行注释)

1.问题分析             在C\C++中,代码的注释风格分为两种,第一种是段注释,这种注释风格是把注释内容放在“/*”和“*/”之间,注释内可以换行,还有一种风格是行注释,这种风格的注释是...
  • MBuger
  • MBuger
  • 2016年08月13日 10:49
  • 1272

C和CPP注释转换

注释转换是将如下几种情况的注释分别按情况转换为相应注释风格(将C注释转换为C++注释风格)首先我们需要两个文件来分别存储需要修改的源码和修改之后的代码,这里我将文件创建在当前目录之下注释转换的实现依据...
  • centor
  • centor
  • 2017年06月03日 14:34
  • 545

注释转换 (将C注释转换为C++注释)

注释转换  注释转换 》  就是将代码中的注释转换为同一类的  , 比如是 C 语言 或者C++  C语言中  ,编译器默认的注释风格是    /*  .........*/    C++中 ...
  • WX_East
  • WX_East
  • 2016年08月11日 10:41
  • 1131

C/C++ 代码规范: 命名规则、注释、格式

摘抄精简Google 开源项目风格指南: http://zh-google-styleguide.readthedocs.org/en/latest/contents/ 一. 命名规则 永远不要使用单...
  • quzhongxin
  • quzhongxin
  • 2015年05月15日 10:08
  • 3109

Eclipse c++注释模板以及注释文档生成

首先注释可以使用中文,主要目的是为了让其他人看懂。 注释可以通过eclipse模板设置进行规范:Windows---preferences---C/C++----Code Style----Code...
  • hornsun
  • hornsun
  • 2012年07月23日 11:17
  • 3612

C/C++代码头注释规范

/*********************************************************************************   *Copyright(C),...
  • fmxfmx2011
  • fmxfmx2011
  • 2014年06月15日 16:55
  • 3068

C语言注释与C++注释的相互转换

做此项目的经历主要的收获是熟悉了状态机这一方法的使用,还有就是对每实现一个功能就尽量封装一个函数这一概念把握的更为精到。状态机:关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的...
  • ljx_5489464
  • ljx_5489464
  • 2016年03月09日 00:26
  • 856
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c注释转换成c++注释
举报原因:
原因补充:

(最多只允许输入30个字)