【C语言项目】注释转换

原创 2016年05月30日 17:17:33
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

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 == '*')
            {
                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'://多行注释问题
            fputc('\n', fOut);

            if (tag == C_BEGIN)
            {
                fputc('/', fOut);
                fputc('/', fOut);
            }
            break;
        case '*':
            second = fgetc(fIn);
            if (second == '/')
            {
                //换行问题
                char next = fgetc(fIn);

                //连续注释问题
                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* fIn, *fOut;
    fIn = fopen(inputFile, 'r');
    if (inputFile == NULL)
    {
        printf("打开文件%s失败, errno: %d\n", inputFile, errno);
        return FILE_ERROR;
    }

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

    ret = convert(fIn,fOut);
    fclose(fIn);
    fclose(fOut);

    return ret;
}
int main()
{
    
}

注释转换--

C语言的注释 -> C++的注释

C语言的注释 /* xxxxx */

C++的注释   //xxxxx


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


本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1743806

相关文章推荐

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

```//CommentConvert.h文件 #ifndef __COMMENT_CONVERT_H__ #define __COMMENT_CONVERT_H__ #include #inclu...

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

此项目可以将C语言的注释部分格式转换成c++的注释格式,代码其他的部分不变。 即: 思路:将C语言得到注释转换成c++的注释格式,我们可以定义一个文件指针从我们的源文件中逐次取字符与C...
  • WRNGT
  • WRNGT
  • 2017年02月27日 22:23
  • 152

c语言项目 注释转换 (c———c++)

题目要求: 要将全部的c语言风格的注释转换为c++风格的注释,如下图所示,需要将input.c文件经过注释转换程序转换为output.c文件所示。 这是测试结果: 首先我们来分析一下这个题目...

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

编写一个小项目将一个一个文件中的注释都转换成C++的注释风格 设计部分: (1)头文件模块:包括模块中需要引用的头文件定义,需要实现的主要函数的声明 (2)头文件中主要函数模块的实现:各个函数部分实现...

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

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

C语言小项目制作之---注释转换

学过C语言的都知道,在C语言中注释是用/*和*/表示的,/*与*/之间的内容就是注释内容。当然用//也可以作为注释,//后面的内容就是注释的内容,不过这种注释通常用于C++之中,今天就用C语言来写个小...

【C语言】注释转换

首先我们应该知道,在C语言中 ,编译器默认的注释风格是 /* .........*/ ,而在C++中 ,编译器默认的注释风格是 // ....... 注释一行。这两种注释风格是可以...

C语言 注释转换

在编写代码中,经常会注释掉某段代码,C语言一般有两种方式:一种是/*xxxxxx*/,另一种是://xxxxx.第一种注释方式不能嵌套使用,在/与*的匹配上可能会造成理解错误,第二种注释可以注释掉一行...

【C语言】注释转换

分析思路:状态转换 将注释分为 常规状态(null),C语言状态(/*), Cpp状态(//) 用三种状态的转换来分析复杂多样的注释情况; Commentconvert.h #ifndef...

C语言实现C到C++的注释转换

C语言中的注释一般为/*......*/来标注,C++的注释一般为//来标注,为了完成注释的转换,我考虑了一下几种情:    1.一般情况    /* int i = 0; */    这是最通常的情...
  • pawnsir
  • pawnsir
  • 2016年05月28日 18:35
  • 154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【C语言项目】注释转换
举报原因:
原因补充:

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