c/c++注释转换

来源:互联网 发布:今日头条数据图 编辑:程序博客网 时间:2024/05/20 17:09

C语言与c++有着不同的注释方式,所以我进行了将c的注释转换成c++的注释

CommentConvert.h文件#define _CRT_SECURE_NO_WARNINGS 1#ifndef __COMMENT_H__#define __COMMENT_H__#include <stdio.h>#include <stdlib.h>enum STATE{    NUL_STATE,    C_STATE,    CPP_STATE,    END_STATE};void DoCState(FILE* pfIn, FILE* pfOut);void DoCppState(FILE* pfIn, FILE* pfOut);void DoNulState(FILE* pfIn, FILE* pfOut);void DoConvertWork(FILE* pfIn, FILE* pfOut);#endif //__COMMENT_H__
CommentConvert.c文件#define _CRT_SECURE_NO_WARNINGS 1#include "CommentConvert.h"static enum STATE state = NUL_STATE;void DoConvertWork(FILE* pfIn, FILE* pfOut){    while (state != END_STATE)    {        switch (state)        {        case NUL_STATE:            DoNulState(pfIn, pfOut);            break;        case C_STATE:            DoCState(pfIn, pfOut);            break;        case CPP_STATE:            DoCppState(pfIn, pfOut);            break;        default:            break;        }    }}void CommentConvert(){    FILE* pfWrite = NULL;    FILE* pfRead = NULL;    pfRead = fopen("input.c", "r");    if (pfRead == NULL)    {        perror("open file for read");        return;    }    pfWrite = fopen("output.c", "w");    if (pfWrite == NULL)    {        perror("open file for write");        fclose(pfRead);        return;    }    DoConvertWork(pfRead, pfWrite);    fclose(pfRead);    fclose(pfWrite);}void DoNulState(FILE* pfIn, FILE* pfOut){    int first = fgetc(pfIn);    switch (first)    {    case '/':    {                int second = fgetc(pfIn);                switch (second)                {                 case '*':                    fputc(first, pfOut);                    fputc('/', pfOut);                    state = C_STATE;                    break;                case'/':                    fputc(first, pfOut);                    fputc('/', pfOut);                    state = CPP_STATE;                    break;                case EOF:                    fputc(first, pfOut);                    state = END_STATE;                      break;                default:                    fputc(first, pfOut);                    fputc(second, pfOut);                }    }        break;    case EOF:        fputc(first, pfOut);        state = END_STATE;        break;    default:        fputc(first, pfOut);        break;    }}void DoCState(FILE* pfIn, FILE* pfOut){    int first = fgetc(pfIn);    int second = 0;    switch (first)    {    case '*':         second = fgetc(pfIn);            if (second == '/')            {                int third = fgetc(pfIn);                state = NUL_STATE;                if (third != '\n')                {                    fputc('\n', pfOut);                    ungetc(third, pfIn);//将已读数据还给缓冲区                 }                if (third == '\n')                {                    fputc(third, pfOut);                }            }            else            {                fputc(first, pfOut);                ungetc(second, pfIn);//将*之后的内容还回缓冲区;              }        break;    case '\n'://换行,连续注释,就将下一行开头加入Cpp注释;          fputc(first, pfOut);        fputc('/', pfOut);        fputc('/', pfOut);        break;    case EOF:        fputc(first, pfOut);        state = END_STATE;        break;    default:        fputc(first, pfOut);        break;    }}void DoCppState(FILE* pfIn, FILE* pfOut){    int first = fgetc(pfIn);    switch (first)    {    case'\n'://Cpp注释的换行就是一行注释的结束;          fputc(first, pfOut);        state = NUL_STATE;        break;    case EOF:        fputc(first, pfOut);        state = END_STATE;        break;    default:        fputc(first, pfOut);        break;    }}
test.c文件#define _CRT_SECURE_NO_WARNINGS 1#include "CommentConvert.h"void test(){    CommentConvert();}int main(){    test();    system("pause");    return 0;}

结果对比如下:

这里写图片描述

0 0