在我们写代码是有时要注释,所以很多时候,我们都是ctrl+k+c.既然常常用到,我们不妨写写看看它是怎么转换的。一方面提高编程能力,另一方面,也可以提高自身的的思考和处理问题的能力。

 首先,我们来思考注释转换一个有多少问题。

 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;

大概,就这些吧。一看八个问题,可能有些头大。这么多问题怎么才能解决呢?

我们可以一个一个的解决,分布解决

.h#include
#include
#include
#include
.cpp#define _CRT_SECURE_NO_WARNINGS 1#include"AnnotationConver.h"typedef enum State{ C_BEGIN, C_END,}State;void Conver(FILE* put, FILE* Out){ char frist, second; State tag = C_BEGIN; assert(put); assert(Out); do { frist = fgetc(put); switch (frist) { case '/': second =  fgetc(put); if(second == '*' && tag == C_BEGIN)     // 3.匹配问题 {               fputc('/',Out);    fputc('/',Out);    tag = C_END; } else { fputc(frist,Out); fputc(second,Out); if(second == '/') {                char nextch;                do              {   nextch = fgetc(put);                  fputc(nextch, Out);              } while (nextch != '\n' && nextch != EOF); } } break; case'*': second =  fgetc(put); if(second == '/') { /*if(tag == C_BEGIN)    { fputc('\n',Out); tag = C_BEGIN; } else if (tag == C_DD) { fputc(frist,Out); fputc(second,Out); }*/  char nextch ;  fputc('\n', Out);                    tag = C_BEGIN; nextch = fgetc(put);                                       if (nextch == '/')                    {                        fseek(put, -1, SEEK_CUR);                    }                    else if (nextch != '\n')                    { fputc(nextch, Out);                    } } else                                   //连续的**/问题 { fputc(frist,Out); fseek(put,-1,SEEK_CUR); } break; case '\n':                                       // 4.多行注释问题 /*second =  fgetc(put); if(second == EOF) { break; }*/ if(tag == C_END) {  fputc('\n',Out);  fputc('/',Out);  fputc('/',Out);            } /*else if(tag == C_BEGIN) { fputc(frist,Out); }*/ break; default: fputc(frist,Out); break; } }while(frist != EOF );}void Annotationconver(const char* putfile, const char* Outfile){ FILE* put, *Out; put = fopen(putfile,"r"); if(put == NULL) { printf("打开文件%s失败,errno:%d\n",putfile,errno); }     Out = fopen(Outfile,"w"); if(Out == NULL) { printf("打开文件%s失败,errno:%d\n",Outfile,errno); } Conver(put, Out); fclose(put); fclose(Out);}int main(){ Annotationconver("input.c","output.c"); system("pause"); return 0;}

以上便是,本人自己写出来的,在我们一个接一个解决问题的时候,有时候,在解决第三个问题时,第四个问题也得以解决,或者解决后一个问题时,影响到后一个问题。所以我们要学会思考和调试。从而方便与我们解决问题和实现功能。