+ -
当前位置:首页 → 问答吧 → 去除C源代码中的注释(还有问题)

去除C源代码中的注释(还有问题)

时间:2010-08-27

来源:互联网

本帖最后由 0vk0 于 2010-08-27 10:45 编辑

大虾帮忙看下,去除/* */时有问题
  1. void del_comment(char * buffer)
  2. {
  3.         char *p,*q;
  4.         p = buffer;
  5.         q = buffer + 1 ;

  6.         for ( ; *p != '\0' ; )
  7.         {
  8.                 if ( *p == '/' && *q == '/' )
  9.                 {
  10.                         while ( *p++ != '\n' )
  11.                                 ;
  12.                         q = p + 1;
  13.                 }

  14.                 if ( *p == '\"' )
  15.                 {
  16.                         putchar(*p);
  17.                         while ( *p++ != '\"' )
  18.                         {
  19.                                 putchar(*p);
  20.                         }
  21.                         q = p + 1;
  22.                 }

  23.                 if ( *p == '\'' )
  24.                 {
  25.                         putchar(*p);
  26.                         while ( *p++ != '\'' )
  27.                         {
  28.                                 putchar(*p);
  29.                         }
  30.                         q = p + 1;
  31.                 }

  32.                 if ( *p == '/' && *q == '*' )                                //这里有问题
  33.            {

  34.                         while ( *p++ != '*' && *q++ != '/' )             //不知道为什么这里只循环一次
  35.                                   ;
  36.                 p++;
  37.                         q++;

  38.                         printf("\n");
  39.                 }

  40.                 putchar(*p);
  41.                 p++;
  42.                 q++;

  43.         }

  44.         printf("\n");
  45. }
复制代码

作者: 0vk0   发布时间: 2010-08-27

我告诉一个非常简单的方法,clang,clang的接口非常清晰,你可以调用cpp的命令进行预处理。
或者,gcc的libcpp,这个稍微复杂一点。

作者: prolj   发布时间: 2010-08-27

while ( *p++ != '/' && *q++ != '*' )             //不知道为什么这里只循环一次

*p++ 等于 *p;p++; (也不完全一样,*p++是一次完成了*p 和 p++)。你应该是这里没搞清楚

   if ( *p == '/' && *q == '*' )                                //这里有问题
而这里的*p 就是 '/', 下面当然就执行到*p!='/'就结束了, 然后p++一次。q也一样

作者: d19890104   发布时间: 2010-08-27



QUOTE:
while ( *p++ != '/' && *q++ != '*' )             //不知道为什么这里只循环一次

*p++ 等于 *p;p++; ( ...
d19890104 发表于 2010-08-27 10:25




    那里刚才写错了,下面条件是while ( *p++ != '*' && *q++ != '/' )

作者: 0vk0   发布时间: 2010-08-27



QUOTE:
我告诉一个非常简单的方法,clang,clang的接口非常清晰,你可以调用cpp的命令进行预处理。
或者,gcc的li ...
prolj 发表于 2010-08-27 09:32




    P姨,我不会啊,而且对C++我一窍不通

作者: 0vk0   发布时间: 2010-08-27