实现去除c语言注释的小工具

 更新时间:2014年02月28日 11:49:47   作者:  
这篇文章主要介绍了实现去除c语言注释的小工具,说是C语言,但其实所有C语系的都可以,比如Java,需要的朋友可以参考下

去除C代码中的注释,
1. 单行注释//;
2. 多行注释/**/;
3. 单行注释以“\”结尾则下一行也为注释;
4. 字符串中的注释不处理。
说是C语言,但其实所有C语系的都可以,比如Java。


小工具:去除C语言注释 

复制代码 代码如下:

#include <stdio.h>

int main(int argc, char* argv[]) {
  enum {
    literal,
    single,
    multiple,
    string
  } mode = literal;
  char last = 0, current;

  while ((current = getchar()) != EOF) {
    switch (mode) {
    case single: {
      if (last != '\\' && (current == '\n' || current == '\r')) {
        putchar(current);
        current = 0;
        mode = literal;
      }
    } break;
    case multiple: {
      if (last == '*' && current == '/') {
        current = 0;
        mode = literal;
      }
    } break;
    case string: {
      if (last == '\\') {
        putchar(last);
        putchar(current);
      } else if (current != '\\') {
        putchar(current);
        if (current == '"') {
          mode = literal;
        }
      }
    } break;
    default: {
      if (last == '/') {
        if (current == '/') {
          mode = single;
        } else if (current == '*') {
          mode = multiple;
        } else {
          putchar(last);
          putchar(current);
        }
      } else if (current != '/') {
        putchar(current);
        if (current == '"') {
          mode = string;
        }
      }
    } break;
    }
    last = current;
  }

  return 0;
}

测试代码

复制代码 代码如下:

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

int main (int argc, char *argv[])
{
// not show\
not show\
not show
// not show
/* not show */
    int is; // not show
    int/* not show */ ms; /* not show */
    double ds; // not show\
    not show\
    not show
    double dm; /* ...
    not show
    not show */ float fs; /**
                           * now show
                           */
    float/**/ fm;
    char cs[] = "aaa // /***/";
    char cm1[] = /* not show */"hello*/";
    char cm2[] = "/*redraiment"/* not show */;
    /* printf("/////"); */
    return EXIT_SUCCESS;
}

处理后的代码

复制代码 代码如下:

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

int main (int argc, char *argv[])
{

 

    int is;
    int ms;
    double ds;
    double dm;  float fs;
    float fm;
    char cs[] = "aaa // /***/";
    char cm1[] = "hello*/";
    char cm2[] = "/*redraiment";

    return EXIT_SUCCESS;
}

相关文章

  • C++如何调用opencv完成运动目标捕捉详解

    C++如何调用opencv完成运动目标捕捉详解

    OpenCV作为机器视觉开源库,使用起来非常不错,这篇文章主要给大家介绍了关于C++如何调用opencv完成运动目标捕捉的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • C语言用递归函数对素数进行判断流程

    C语言用递归函数对素数进行判断流程

    素数判断是编程语言学习过程中一个老生常谈的话题,而它的实现也有多种算法,包括经典的试除法(以及试除法的几种优化),进阶的素数表筛选法,埃拉托斯特尼筛法和欧拉筛法(以及它们的优化)等。对以上算法感兴趣的朋友们,不妨搜索“素数判断的N种境界”来学习了解
    2022-09-09
  • C语言算法金手指摩尔投票法手撕绝大多数问题

    C语言算法金手指摩尔投票法手撕绝大多数问题

    这篇文章主要为大家介绍了C语言算法之金手指摩尔投票法手撕绝大多数问题的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • C++中调用复制(拷贝)函数的三种情况总结

    C++中调用复制(拷贝)函数的三种情况总结

    这篇文章主要介绍了C++中调用复制(拷贝)函数的三种情况总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C语言内存泄漏常见情况及解决方案详解

    C语言内存泄漏常见情况及解决方案详解

    这篇文章主要为大家介绍了C语言内存泄漏常见情况及解决方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • C++实现LeetCode(119.杨辉三角之二)

    C++实现LeetCode(119.杨辉三角之二)

    这篇文章主要介绍了C++实现LeetCode(119.杨辉三角之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Qt创建SQlite数据库的示例代码

    Qt创建SQlite数据库的示例代码

    本文主要介绍了Qt创建SQlite数据库的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 详解C++中static的用法

    详解C++中static的用法

    这篇文章主要介绍了c++中static的用法详解,C 语言的 static 关键字有三种用途,具体内容详情大家跟随脚本之家小编一起学习吧
    2018-05-05
  • C语言树与二叉树基础全刨析

    C语言树与二叉树基础全刨析

    二叉树可以简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。本文将详细介绍一下C中二叉树与树的概念和结构,需要的可以参考一下
    2022-04-04
  • C/C++ 中实现让控制台暂停的方法

    C/C++ 中实现让控制台暂停的方法

    这篇文章主要介绍了C/C++ 中实现让控制台暂停的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论