C注释风格:/* */ C++注释风格: //
主要便是
#ifndef __COMMENT_H__
#define __COMMENT_H__
#include<stdio.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__
#define _CRT_SECURE_NO_WARNINGS 1
#include"CommentConvert.h"
static enum STATE state = NUL_STATE;
void DoNulState(FILE* pfIn, FILE* pfOut)
{
int first = fgetc(pfIn);
int second =
0;
switch (first)
{
case '/':
second = fgetc(pfIn);
if (second ==
'/')
{
fputc(first, pfOut);
fputc(second, pfOut);
state = CPP_STATE;
}
else if (second ==
'*')
{
fputc(
'/', pfOut);
fputc(
'/', pfOut);
state = C_STATE;
}
else
{
fputc(first, pfOut);
fputc(second, pfOut);
}
break;
case EOF:
state = END_STATE;
break;
default:
fputc(first, pfOut);
break;
}
}
void DoCState(FILE*pfIn, FILE* pfOut)
{
int first = fgetc(pfIn);
int second =
0;
int third =
0;
switch (first)
{
case '*':
second = fgetc(pfIn);
switch (second)
{
case '/':
third = fgetc(pfIn);
if (third !=
'\n')
{
fputc(
'\n', pfOut);
}
if (third ==
'/')
{
ungetc(third, pfIn);
state = NUL_STATE;
break;
}
fputc(third, pfOut);
state = NUL_STATE;
break;
case '*':
fputc(first, pfOut);
third = fgetc(pfIn);
if (third ==
'/')
{
state = NUL_STATE;
}
break;
default:
fputc(first, pfOut);
}
break;
case '\n':
fputc(first, pfOut);
fputc(
'/', pfOut);
fputc(
'/', pfOut);
break;
case EOF:
state = END_STATE;
break;
default:
fputc(first, pfOut);
break;
}
}
void DoCppState(FILE* pfIn, FILE* pfOut)
{
int first = fgetc(pfIn);
switch (first)
{
case '\n':
fputc(first, pfOut);
state = NUL_STATE;
break;
case EOF:
state = END_STATE;
break;
default:
fputc(first, pfOut);
break;
}
}
void DoConvertWork(FILE* pfIn, FILE* pfOut)
{
while (state != END_STATE)
{
switch (state)
{
case C_STATE:
DoCState(pfIn, pfOut);
break;
case CPP_STATE:
DoCppState(pfIn, pfOut);
break;
case NUL_STATE:
DoNulState(pfIn, pfOut);
break;
default:
break;
}
}
}
test .c
int main()
{
FILE
*fRead = NULL;
FILE
*fWrite = NULL;
printf(
"注释转换开始\n");
fRead = fopen(
"input.c",
"r");
if (fRead == NULL)
{
perror(
"open file for read");
}
fWrite = fopen(
"output.c",
"w");
if (fWrite == NULL)
{
fclose(fRead);
perror(
"open file for write");
}
DoConvertWork(fRead, fWrite);
fclose(fRead);
fclose(fWrite);
printf(
"注释转换结束\n");
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-9826.html