注释转换

来源:互联网 发布:nginx https 二级域名 编辑:程序博客网 时间:2024/06/15 09:16

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;

头文件:

#ifndef __CONVERT__#define __CONVERT__#pragma warning(disable:4996)#include<stdio.h>#include<stdlib.h>#include<assert.h>#define INPUT_FILE "input.c"#define OUTPUT_FILE "output.c"typedef enum status{    NORMAL_STATUS,    C_Status,    CPP_Status,    END_Status,}Status;void convertBegin();static void convertStatusMachine(FILE * in,FILE * out);void DoNormal(FILE * in, FILE * out);void DoCSatus(FILE * in, FILE* out);void DoCppSatus(FILE * in, FILE* out);#endif // !__CONVERT__

函数部分:

#include"convert.h"Status gStatus=NORMAL_STATUS;void DoNormal(FILE * in, FILE * out)//正常情况下注释转换{    assert(in);    assert(out);    int first = fgetc(in);    int second = 0;    switch (first)    {    case '/':        second = fgetc(in);        if (second == '*')//如果第二个是*,那么是C语言注释,返回 / /        {            fputc('/', out);            fputc('/', out);            gStatus = C_Status;        }        else if (second == '/')//如果是/,那么是cpp注释,直接返回两个变量的内容        {            fputc(first, out);            fputc(second, out);            gStatus = CPP_Status;        }        else//否则,不是注释        {            fputc(first, out);            fputc(second, out);        }        break;    case EOF:        gStatus = END_Status;    default:        fputc(first, out);//        break;    }}/*xxxxxxxxxxx */void DoCSatus(FILE * in, FILE* out)//C语言类型的注释转换{    assert(in);    assert(out);    int first = fgetc(in);    int second = 0;    switch (first)    {    case '*':        second = fgetc(in);        if (second == '/')//当第一个为*,第二个为/,第三个是‘\n’,那么是C语言注释        {            int third = fgetc(in);            if (third == '\n')            {                fputc(third, out);            }            else            {                ungetc(third, in);                fputc("\n", out);            }            gStatus = NORMAL_STATUS;        }        else        {            fputc(first, out);            ungetc(second, in);        }        break;    case '\n'://如果是‘\n’,那么是cpp注释,直接返回 / / 和第一个字符        fputc(first, out);        fputc('/', out);        fputc('/', out);        break;    case EOF://结束转换        gStatus = END_Status;        break;    default:        fputc(first, out);        break;    }}//xxxxxxxxvoid DoCppSatus(FILE * in, FILE* out)//p类型注释转换{    assert(in);    assert(out);    int first = fgetc(in);    switch (first)    {    case '\n'://当第一个字符为'\n',那么,为正常转换        gStatus = NORMAL_STATUS;        fputc(first, out);        break;    case EOF://到文本结束符,结束转换        gStatus = END_Status;        break;    default:        fputc(first, out);        break;    }}static void convertStatusMachine(FILE * in, FILE * out){    assert(in);    assert(out);    while (gStatus != END_Status)    {        switch (gStatus)        {        case NORMAL_STATUS:            DoNormal(in, out);            break;        case C_Status:            DoCSatus(in, out);            break;        case CPP_Status:            DoCppSatus(in, out);            break;        case END_Status:            break;        default:            break;        }    }}void convertBegin(){    FILE * in = fopen(INPUT_FILE, "r");    if (NULL == in)    {        perror("fopen");        exit(1);    }    FILE * out = fopen(OUTPUT_FILE, "w");    if (NULL == out)    {        perror("fopen");        exit(2);    }    convertStatusMachine(in, out);    fclose(in);    fclose(out);}

主函数部分:

#include"convert.h"int main(){    convertBegin();    printf("convert done……\n");    system("pause");    return 0;}
0 0
原创粉丝点击