#include <stdio.h> #include <errno.h> #include <assert.h> typedef enum STATE { SUCCESS, // 成功 FILE_ERROE, // 文件错误 NO_MATCH, // 不匹配 OTHER, // 其它错误 }STATE; typedef enum TAG { TAG_BEGIN, // 在C凝视段中 TAG_END, // C凝视结束 }TAG; #pragma warning(disable:4996) STATE AnnotationConvert(FILE* inFile, FILE* outFile) { TAG tag = TAG_END; char firstCh, secondCh; assert(inFile); assert(outFile); do{ firstCh = fgetc(inFile); switch (firstCh){ case '/': secondCh = fgetc(inFile); if (secondCh == '*'&& tag == TAG_END) { fputc('/', outFile); fputc('/', outFile); tag = TAG_BEGIN; } else { fputc(firstCh, outFile); fputc(secondCh, outFile); if (secondCh == '/') { char next = fgetc(inFile); while ((next != '\n')&&(next!=EOF)) { next = fgetc(inFile); fputc(next, outFile); } } } break; case '\n': fputc('\n', outFile); if (tag == TAG_BEGIN) { fputc('/', outFile); fputc('/', outFile); } break; case '*': secondCh = fgetc(inFile); if (secondCh == '/'&&tag==TAG_BEGIN) { char next = fgetc(inFile); if (next != '\n' && next != EOF) { fseek(inFile, -1, SEEK_CUR); } if (next == EOF) { firstCh = EOF; } tag = TAG_END; } else { fputc(firstCh, outFile); fseek(inFile, -1, SEEK_CUR); } fputc('\n', outFile); break; default: fputc(firstCh, outFile); break; } } while (firstCh != EOF); if (tag == TAG_END) { return SUCCESS; } else { return NO_MATCH; } } int StartConvert() { STATE s; const char* inFileName = "input.c"; const char* outFileName = "output.c"; FILE* inFile = fopen(inFileName, "r"); FILE* outFile = fopen(outFileName, "w"); if (inFile == NULL) { return FILE_ERROE; } if (outFile == NULL) { fclose(inFile); return FILE_ERROE; } s = AnnotationConvert(inFile, outFile); fclose(inFile); fclose(outFile); return s; } int main() { STATE ret = StartConvert(); if (ret == SUCCESS) { printf("转换成功\n"); } else if (ret == NO_MATCH) { printf("不匹配\n"); } else if (ret == FILE_ERROE) { printf("文件错误: %d\n", errno); } else { printf("其它错误: %d\n", errno); } return 0; }
凝视转换(部分)
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:域控制器情况分析
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Beginctf 2024 pwn部分题解
beginctf 2024 pwn 部分题解wp
格式化字符串 beginctf pwn 栈溢出 wp -
凝视
因为你的凝视,我才敢驻足停留;因为你的驻足停留,我才敢真正地与你相望。 &nb
信息 鲜花 哲理 眼神 忧郁 凝视 -
Java凝视Annotation
Java凝视Annotation 从JDK 5開始,Java添加了对元数据(MetaData)的支持,也就是Annotation(凝
java hibernate 成员变量 元数据 编译器