c语言注释转换成c++注释

本文介绍了一个用于处理C语言源代码中注释的转换器。该转换器能够识别并处理不同类型的注释,包括单行注释和多行注释,并将其转换为统一格式。文章提供了转换器的具体实现代码,可用于理解和学习C语言注释处理的基本方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值