若想完成C注释向C++注释的转换:首先要识别注释语言的种类,例如://hello 是C++的注释标准,/*hello*/是C的注释标准,转换的过程就是指针指向的如果是相邻的// 则·照常输入·,如果·遇见换行,则进入普通状态,重新对下一个字符进行判断。
如果遇见相邻的/*则需要进行C注释向C++注释的转换,即/*—>//的转换,C注释的开头标志转换成//之后,再需要进行注释标志结尾的查找,如果找到两个相邻的*/(如:*/,*****/等情况),(注意注释结束要输入换行),则表示C注释的结束,则之后进入普通状态,对下一个字符进行判断。
如果遇见普通的代码,则照常输出。
具体的代码如下:
头文件:connvert_comment.h
#ifndef __CONNVERT_COMMENT_H__
#define __CONNVERT_COMMENT_H__
#define INTPUTFILE "intput.c"
#define OUTPUTFILE "output.c"
enum {
CSTATUS,
NULLSTATUS,
CPPSTATUS,
EOFSTATUS
};
void do_null_status(FILE *ifp,FILE *ofp);
void do_cpp_status(FILE *ifp,FILE *ofp);
void do_cs_status(FILE *ifp,FILE *ofp);
void do_eof_status(FILE *ifp,FILE *ofp);
static void convert_work(FILE *ifp,FILE *ofp);
void connver_main();
#endif源文件 main.c
#include<stdio.h>
#pragma warning(disable:4996)
#include<windows.h>
#include"connvert_comment.h"
int main(void)
{
connver_main();
system("pause");
return 0;
}源文件 connvert_comment.c
#include<stdio.h>
#include<stdlib.h>
#pragma warning (disable:4996)
#include"connvert_comment.h"
int status=NULLSTATUS;
void do_null_status(FILE *ifp,FILE *ofp)
{
int c=fgetc(ifp);
if(c=='/')
{
int s=fgetc(ifp);
if(s=='*')
{
fputc('/',ofp);
fputc('/',ofp);
status=CSTATUS;
}
else if(s=='/')
{
fputc('/',ofp);
fputc('/',ofp);
status=CPPSTATUS;
}
else if(s==EOF)
{
status=EOFSTATUS;
}
else
{
fputc(c,ofp);
}
}
else if(c==EOF)
{
status=EOFSTATUS;
}
else if(c=='\n')
{
fputc('\n',ofp);
status=NULLSTATUS;
}
else
{
fputc(c,ofp);
}
}
void do_cs_status(FILE *ifp,FILE *ofp)
{
int c=fgetc(ifp);
if(c=='*')
{
int s=fgetc(ifp);
if(s=='/')
{
status=NULLSTATUS;
}
else if(s=='\n')
{
fputc('\n',ofp);
fputc('/',ofp);
fputc('/',ofp);
}
else
{
ungetc(s,ifp);
fputc(c,ofp);
}
}
else if(c=='\n')
{
fputc('\n',ofp);
fputc('/',ofp);
fputc('/',ofp);
}
else
fputc(c,ofp);
}static void convert_work(FILE *ifp,FILE *ofp)
{
while(status !=EOFSTATUS)
{
switch (status)
{
case NULLSTATUS:do_null_status(ifp,ofp);
break;
case CPPSTATUS:do_cpp_status(ifp,ofp);
break;
case CSTATUS:do_cs_status(ifp,ofp);
break;
default:
break;
}
}
}
void connver_main()
{
FILE * ifp=fopen(INTPUTFILE,"r");
FILE * ofp=fopen(OUTPUTFILE,"w");
if(ifp==NULL ||ofp==NULL)
{
printf("");
return ;
}
convert_work(ifp,ofp);
fclose(ifp);
fclose(ofp);
return;
}
本文介绍了一个实用工具,用于将C语言的注释转换为C++风格的注释。通过解析输入文件中的注释类型,并将其转换为目标格式,从而帮助开发者更便捷地迁移代码库。

被折叠的 条评论
为什么被折叠?



