您的位置:首页 > 编程语言 > C语言/C++

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

2017-07-30 12:31 387 查看
注释一般来讲有分为两种:

一是单行注释:直接在该行需要注释的地方加上”//”就行

如:// int a=0;

int b=0; //定义一个变量

另外还有一种是多行同时注释(不能嵌套使用):

如:/*

int a,b;

int c,d;

*/

其中/* 和 */起限定范围的作用,该范围内的语句都会被注释掉,将不再起作用。

当然以上多行注释也是可以用来单行注释的

//int a,b;

//int c,d;

一般来讲我们习惯把‘//’这种注释叫作c++注释,

‘/* */’叫作c语言注释

接下来我们来试着用代码实现一下从c注释到c++注释的转换

图解



代码实现

commentconvert.h文件

#define _CRT_SECURE_NO_WARNINGS 1

#ifndef __COMMENT_CONVERT_H__
#define __COMMENT_CONVERT_H__

#include <stdio.h>
#include <stdlib.h>

enum STATE
{
NUL_STATE,//无状态
C_STATE,  //c状态
CPP_STATE,//c++状态
END_STATE //结束状态
};
void DoNulState(FILE *pfIn, FILE *pfOut, enum STATE *s);
void DoCState(FILE *pfIn, FILE *pfOut, enum STATE *s);
void DoCppState(FILE *pfIn, FILE *pfOut, enum STATE *s);
void DoComment(FILE *pfIn, FILE *pfOut);

#endif //__COMMENT_CONVERT_H__


commentconvert.c文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"commentconvert.h"
void DoNulState(FILE*pfIn, FILE*pfOut, enum STATE* s)
{
int first = 0;
first = fgetc(pfIn);
switch (first)
{
case'/':
{
int second;
second = fgetc(pfIn);
switch (second)
{
case'*':
fputc('/', pfOut);
fputc('/', pfOut);
*s = C_STATE;
break;
case'/':
fputc(first, pfOut);
fputc(second, pfOut);
*s = CPP_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'\n':
fputc(first, pfOut);
fputc('/', pfOut);
fputc('/', pfOut);
break;
case'*':
{
int second = fgetc(pfIn);
switch (second)
{
case'/':
{
*s = NUL_STATE;
int third = fgetc(pfIn);
switch (third)
{
case'\n':
fputc(third, pfOut);
break;
case'/':
ungetc(third, pfIn);
fputc('\n', pfOut);
break;
default:
fputc('\n', pfOut);
fputc(third, pfOut);
}
}
break;
case'*':
fputc(second, pfOut);
ungetc(second,pfIn);
break;
default:
fputc(first, pfOut);
fputc(second, pfOut);
break;
}
break;
}
case EOF:
*s = END_STATE;
break;
default:
fputc(first, pfOut);
break;
}
}
void DoCppState(FILE *pfIn, FILE *pfOut, enum STATE *s)
{
int first = 0;
first = fgetc(pfIn);
switch (first)
{
case'\n':
fputc(first, pfOut);
*s = NUL_STATE;
break;
case EOF:
*s = END_STATE;
break;
default:
fputc(first, pfOut);
break;
}
}
void DoComment(FILE*pfIn, FILE*pfOut, enum STATE* s)
{
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;
default:
break;
}
}
}


test.c文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"commentconvert.h"

void test()
{
FILE *pfIn = NULL;
FILE *pfOut = NULL;
pfIn = fopen("test.c1.txt", "r");
if (pfIn == NULL)
{
perror("open file for read.");
exit(EXIT_FAILURE);
}
pfOut = fopen("test.c2.txt", "w");
if (pfOut == NULL)
{
perror("open file for write.");
fclose(pfIn);
exit(EXIT_FAILURE);
}
DoComment(pfIn, pfOut);
fclose(pfIn);
fclose(pfOut);
}

int main()
{
test();
system("pause");
return 0;
}


转换效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: