注释转换

原创 2016年08月31日 10:54:56




#pragma once
#include<assert.h>
#include <errno.h>

#pragma warning (disable: 4996)

typedef enum ConvertState
{
     SUCCESS,
     FILE_ERROR,
     NO_MATCH,
}ConvertState;

typedef enum State
{
     C_BEGIN,
     C_END,
     CPP_BEGIN,
     CPP_END,
}State;

ConvertState Convert(FILE* fIn, FILE* fOut)
{
     ConvertState  ret = SUCCESS;

     char first, second;
     State tag = C_END;
     assert(fIn);
     assert(fOut);
     do{
          first = fgetc(fIn);
          switch(first)
          {
          case '/':
               second = fgetc(fIn);
               if (second == '*')
               {
                    // 3.匹配问题
                    if (tag == C_END)
                    {
                         fputc('/', fOut);
                         fputc('/', fOut);

                         tag = C_BEGIN;
                    }
                    else
                    {
                         fputc('/', fOut);
                         fputc('*', fOut);
                    }
               }
               else if(second == '/')
               {
                    char next;
                    fputc('/', fOut);
                    fputc('/', fOut);
                   
                    do{
                         next = fgetc(fIn);
                         fputc(next, fOut);

                         if (next == EOF)
                              return ret;

                    }while (next != '\n');
               }
               else
               {
                    fputc(first, fOut);
                    fputc(second, fOut);
               }
               break;
          case '\n':
               // 4.多行注释问题
               fputc('\n', fOut);

               if (tag == C_BEGIN)
               {
                    fputc('/', fOut);
                    fputc('/', fOut);
               }

               break;
          case '*':
               second = fgetc(fIn);
               if (second == '/')
               {
                    // 2.换行问题
                    char next = fgetc(fIn);

                    // 5.连续注释问题
                    if (next == '/')
                    {
                         fputc('\n', fOut);
                         fseek(fIn, -1, SEEK_CUR);
                    }
                    else if (next != '\n' && next != EOF)
                    {
                         fputc('\n', fOut);
                         fputc(next, fOut);
                    }
                    else
                    {
                         fputc('\n', fOut);
                    }

                    tag = C_END;
               }
               else if(second == '*')
               {
                    fputc(first, fOut);
                    fseek(fIn, -1, SEEK_CUR);
               }
               else
               {
                    fputc(first, fOut);
                    fputc(second, fOut);
               }

               break;
          default:
               if (first != EOF)
                    fputc(first, fOut);

               break;
          }
     }while(first != EOF);

     if (tag != C_END)
     {
          ret = NO_MATCH;
     }

     return ret;
}

ConvertState AnnotationConvert(const char* inputFile,
                            const char* outputFile)
{
     ConvertState ret;
     FILE* fOut, *fIn;
     fIn = fopen(inputFile, "r");
     if (fIn == NULL)
     {
          printf("打开文件%s失败, errno: %d\n", inputFile, errno);
          return FILE_ERROR;
     }

     fOut = fopen(outputFile, "w");
     if (fOut == NULL)
     {
          fclose(fIn);
          printf("打开文件%s失败! errno: %d", outputFile, errno);
          return FILE_ERROR;
     }
    
     ret = Convert(fIn, fOut);

     fclose(fIn);
     fclose(fOut);

     return ret;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

注释转换机

  • 2017年02月09日 22:41
  • 7.76MB
  • 下载

c语言小项目----注释转换

这篇博客,我将整理关于注释转换的知识,首先,得知道,注释转换包括,c语言注释转 换成c++注释,和c++注释转换成c语言注释。 c语言注释的风格:/*这是c语言注释*/ c++语言注释风格://这是c...

注释转换(进阶版)

  • 2017年02月25日 17:40
  • 7.78MB
  • 下载

阳历转换农历,有详细注释

  • 2010年05月27日 19:38
  • 4KB
  • 下载

【C语言】C代码注释转换

C语言注释转换是C语言内比较小的一个课题,这个课题的主要思想是需要考虑到可能出现的情况,然后转换为我们能用程序语言描述的情形。...

C++自测题 注释转换

  • 2009年05月21日 22:19
  • 518B
  • 下载

【C语言】注释转换项目实现

编写一个小项目将一个一个文件中的注释都转换成C++的注释风格 设计部分: (1)头文件模块:包括模块中需要引用的头文件定义,需要实现的主要函数的声明 (2)头文件中主要函数模块的实现:各个函数部分实现...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:注释转换
举报原因:
原因补充:

(最多只允许输入30个字)