c语言注释转换项目

Annootation conversion.h

#ifndef __ANNONTATION_CONVERSION_H__
#define __ANNONTATION_CONVERSION_H__

#define INPUTFILE "input.c"
#define OUTPUTFILE "output.c" 

void Annotation_conversion(FILE *ifp, FILE *ofp);

enum
{
    COMMONSTATE, //普通状态 
    CSTATE,          //c风格状态
    CPPSTATE,        //c++风格状态
    EOFSTATE,        //文件结束状态
};

#endif//__ANNONTATION_CONVERSION_H__

Annotation conversion.c

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

#include"Annotation conversion.h"

int state = COMMONSTATE;

//普通状态
void common_state(FILE *ifp,FILE *ofp)     
{
    int ch = fgetc(ifp);
    switch(ch)
    {
        case '/':
            {
                int a = fgetc(ifp);
                switch(a)
                {
                    case '*':
                        fputc('/',ofp);
                        fputc('/',ofp);
                        state = CSTATE;
                        break;
                    case '/':
                        fputc('/',ofp);
                        fputc('/',ofp);
                        state = CPPSTATE;
                        break;
                    case EOF:
                        fputc(ch,ofp);  //
                        state = EOFSTATE;
                        break;
                    default :
                        fputc(ch,ofp);
                        //fputc(a,ofp);   //
                        ungetc(a,ifp);  //
                        state = COMMONSTATE;
                        break;                      
                }
            }
            break;
        case EOF:
            state = EOFSTATE;
            break;
        default:
            fputc(ch,ofp);
            state = COMMONSTATE;
            break;
    }
}

//c风格状态
void c_state(FILE *ifp,FILE *ofp)
{
    int ch = fgetc(ifp);
    switch(ch)
    {
        case '*':
            {
                int a = fgetc(ifp);
                switch(a)
                {
                    case '/':
                        //
                        fputc('\n',ofp);
                        state = COMMONSTATE;
                        break;
                    case EOF:
                        fputc(ch,ofp);  //
                        state = EOFSTATE;
                        break;
                    default:
                        fputc(ch,ofp); //
                        fputc(a,ofp);  //
                        ungetc(a,ifp); //
                        state = CSTATE;
                        break;
                }
            }
            break;
        case '\n':
            fputc('\n',ofp);
            fputc('/',ofp);
            fputc('/',ofp);
            state = CSTATE; //
            break;
        case EOF:
            state = EOFSTATE;
            break;        //
        default:
            fputc(ch,ofp);
            state = CSTATE;
            break;
    }
}

//c++风格状态
void cpp_state(FILE *ifp,FILE *ofp)
{
    int ch = fgetc(ifp);
    switch(ch)
    {
        case EOF:
            state = EOFSTATE;
            break;   //
        case '\n':
            fputc('\n',ofp);
            state = COMMONSTATE;
            break;  //
        default:
            fputc(ch,ofp);
            state = CPPSTATE;
            break;
    }
}

int eof_state(FILE *ifp, FILE *ofp)
{
    return 0;
}

//注释转换
void Annotation_conversion(FILE *ifp, FILE *ofp)
{
    while(state != EOFSTATE)
    {
        switch(state)
        {
            case COMMONSTATE:
                common_state(ifp,ofp);
                break;
            case CSTATE:
                c_state(ifp,ofp);
                break;
            case CPPSTATE:
                cpp_state(ifp,ofp);
                break;
            case EOFSTATE:
                eof_state(ifp,ofp);
                break;
            default:
                break;
        }
    }
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1


#include<stdio.h>
#include<stdlib.h>

#include"Annotation conversion.h"

int main()
{
    FILE *ifp = fopen(INPUTFILE,"r");   
    FILE *ofp = fopen(OUTPUTFILE,"w");
    if((ifp == NULL) || (ofp == NULL))
    {
        printf("不能打开文件\n");
        return -1;
    }

    Annotation_conversion(ifp,ofp);

    fclose(ifp);
    fclose(ofp);
    return 0;
}

input.c

int main()
{
    int c = 20; /* 创建c变量*/
    char ch = 'a'; //创建ch

    return 0;
}

//1.一般情况 
int num = 0;
/* int i = 0;*/

//2.换行问题
/* int i = 0;*/ int j = 0;
/*int i = 0;*/
int z = 0;
//3.匹配问题
/*int i = 0;/*hehehehehehe*/

//4.多行注释问题
/*
int i = 0;
int j = 0;
int k = 0;
*/int v = 0;
//5.连续注释问题
/*int a = 0;*//*int b = 0;*/
//6.连续的***/问题
/****/
//7.c++注释问题
// /*哈哈哈哈*/

这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值