C语言注释情况:
int a = 10;
// 1.一般情况
int num = 0;
/* 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.连续注释问题
/*int a=0;*//*int b=0;*/
// 6.连续的**/问题
/***/
// 7.C++注释问题
// /*xxxxxxxxxxxx*/
???????????CommentConvert.h
#ifndf__COMMENT_CONVERT_H__
#define__COMMENT_CONVERT_H__
typedef enum CONVERT_STATE
{
NULL_STATE,
C_STATE,
CPP_STATE,
END_STATE,
}State;
void CommentCovert();
void DoCovert();
void DoNullState(FILE*read,FILE*write);
void DoCState(FILE*read,FILE*write);
void DoCppState(FILE*read,FILE*write);
#endif//__COMMENTCONVERT_H__
??????????CommentConvert.c
void CommentCovert()
{
FILE*Pread=fopen(input.c,"r");
if(Pread==NULL)
{
perror(file open for read);
exit(EXIT_FAILURE);
}
FILE*Pwrite=fopen(input.c,"write")
{
fclose(Pread);
perror(file open for write);
exit(EXIT_FAILURE);
}
DoConvert(Pread,Pwrite);
fclose(Pread);
fclose(Pwrite);
}
void DoConvert(FILE*read,FILE*write,State* state)
{
state=NULL_START;
while(state!=END_STATE)
{
switch(state)
{
case NULL_STATE:
DoNullState(read,write);
break;
case C_STATE:
DoCState(read,write);
break;
case CPP_STATE;
DoCppState(read,write);
break;
default:
break;
}
}
}
void DoNullState(FILE*read,FILE*write,State* state)
{
int first=fgetc(read);
int second=0;
switch(first)
{
case'/':
second=fgetc(read);
if(second=='/')
{
fputc(first,write);
fputc(second,write);
state=CPP_STATE;
}
elseif(second=='*')
{
fputc(first,write);
fputc(second,write);
state=C_STATE
}
else
{
fputc(first,write);
fputc(second,write);
}
break;
case EOF:
fputc(first,write);
state=END_STATE;
break;
default:
fputc(first,write);
break;
}
}
void DoCState(FILE*read,FILE*write,State* state)
{
int first=fgetc(read);
int second=0;
switch(first)
{
case '*':
second=fgetc(read);
if(second=='/')
{
state=NULL_STATE;
int third=fgetc(read);
if(third=='\n')
{
fputc(third,write);
}
else
{
fputc('\n',write);
ungetc(third,read);
}
}
else
{
fputc(first,write);
ungetc(second,read);
}
break;
case EOF:
putc(first,write);
state=END_STATE;
break;
case '\n':
fputc(first,write);
fputc('/',write);
fputc('/',write);
break;
default:
fputc(first,write);
break;
}
}
void DoCppState(FILE*read,FILE*write)
{
int first=fgetc(read);
switch(first)
{
case'\n':
fputc('\n',write);
state=NULL_STATE;
break;
case EOF:
fputc(first,write);
state=END_STATE;
break;
default
fputc(first,write);
break;
}
}
????????????? test.c
int test()
{
void CommentCovert();
}
int main()
{
test();
system("pause");
return 0;
}