c语言版去除源代码注释

  1. 去除代码中注释需要注意下面几点
    首先注释有”/*”开始到”*/”结束的多行或单行注释
    其次还有”//”这种单行注释
    另外还需要注意双引号和单引号内的字符不要算到注释中
  2. 因此我设计以下程序
    当遇到”“双引号和”“时需要跳过整个字符串,特别注意字符串和字符内部转义字符。
    当遇到”/“斜杠时,匹配下一个为星号还是斜杠,如果下一个是斜杠则直接跳到本行结尾。如果是星号则匹配”*/
  3. 下面是源代码,没啥特别的
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>

/**
* 去掉字符串中注释部分
**/
void remove_comment(char *buf)
{
  size_t off;
  char *s, *p, *t, *tmp;
  char *sss="adas\"d/**/\"*a\"//s/**/d*/"; // 这里主要测试字符串内带注释字符

  for (s = p = buf; *p != '\0'; p++) {
    switch(*p) {
      case '"': // 直接循环到下一个 "
      case '\'': /* 直接循环到下一个 ' */
          // 下面找到字符串结束位置,避免匹配字符串内部的 /* 或者 //
        for (tmp = p + 1; *tmp != *p; tmp++) {
          if (*tmp == '\\') {
            tmp++; /* 跳过转义位置,因为转义字符2个位置代表一个字符 */
          }
        }//阿萨德撒

        // while(1) {
   
          // if ( NULL != (t = strchr(tmp, '\\')) ) {
   
        // printf("%c\n", *tmp);
            // tmp = t + 2; // 有转义字符
          // }
          // if ( NULL != (t = strchr(tmp, *p)) ) {
   
            // tmp = t + 1; // 有要找的字符
            // break;
          // }
        // }
        // printf("%c
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值