⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remcmmnt.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
/* * REMCMMNT.C * Remove comments from C or C++ source * * ver 1.1, 14 Jun 1995 *   - changed multiline C++ comment handling * * ver 1.2, 8 Nov 1995 *   - bug: if file was ended with // comment with no CR/LF, *          program jammed in an endless loop. * * ver 1.3, 21 Nov 1995 *   - bug: did not handle empty strings "" *   - bug: did not handle escape character \" inside strings *   - bug: did not catch an end of comment that ended with two or more '*'s * * Public domain by: *   Jari Laaksonen *   Arkkitehdinkatu 30 A 2 *   FIN-33720 Tampere *   FINLAND * *   Fidonet : 2:221/360.20 *   Internet: jla@to.icl.fi */#include <stdio.h>int main (int argc, char **argv){  int  Char,       Char2,       cpp_comment   = 0,       c_comment     = 0,       in_string     = 0,       cpp_multiline = 0;  char CannotOpen[] = "Cannot open %s\n\n";  FILE *InFile, *OutFile = stdout;  if (argc < 2)  {    fprintf (stderr, "USAGE: REMCMMNT InFile [OutFile]\n");    return 1;  }  if ((InFile = fopen (argv[1], "r")) == NULL)  {    fprintf (stderr, CannotOpen, argv[1]);    return 2;  }  if (argc == 3)  {    if ((OutFile = fopen (argv[2], "w")) == NULL)    {      fprintf (stderr, CannotOpen, argv[2]);      OutFile = stdout;  /* if can't open, output goes to stdout instead */    }  }  while ((Char = fgetc (InFile)) != EOF)  {    /* do we have excape characters \", \\ etc. inside string ? */    if (in_string && Char == '\\')    {      Char2 = fgetc (InFile);      fputc (Char,  OutFile);      fputc (Char2, OutFile);      continue;    }    if (Char == '\"')    {      Char2 = fgetc (InFile);      /* do we have a character constant '\"' or an empty string "" ? */      if (Char2 != '\'' && Char2 != '\"')        in_string = ! in_string;    /* if not, we are in a string */      if (c_comment == 0 && cpp_comment == 0)      {        fputc (Char,  OutFile);        fputc (Char2, OutFile);        continue;      }    }    if (! in_string)    {      if (Char == '/')      {        Char2 = fgetc (InFile);     /* check next char */        if (Char2 == '/')           /* is it start of C++ comment? */          cpp_comment = 1;        else if (Char2 == '*')      /* is it start of C comment? */          c_comment = 1;        if (c_comment == 0 && cpp_comment == 0)        {          fputc (Char,  OutFile);          fputc (Char2, OutFile);          continue;        }      }      else if (Char == '*' && c_comment)      {        Char2 = fgetc (InFile);        if (Char2 == '/')                   /* is it end of C comment? */        {          c_comment = 0;          Char = fgetc (InFile);        }      }      if (c_comment || cpp_comment) /* are we inside C or C++ comment? */      {        Char = '\n'; /* print newline after comment line is processed */        while ((Char2 = fgetc (InFile)) != '\n') /* rest of the line */        {          if (Char2 == EOF)            break;          if (cpp_multiline)          {            if (Char2 != ' ' && Char2 != '\t') /* if not white space => */              cpp_multiline = 0;             /* ...not C++ multiline comment */          }          if (Char2 == '\\' && cpp_comment)            cpp_multiline = 1;          if (Char2 == '*' && c_comment)          {            Char2 = fgetc (InFile); /* check next char */            if (Char2 == '/')       /* is it end of C comment? */            {              c_comment = 0;              Char = fgetc (InFile);              break;            }            else              ungetc (Char2, InFile);        /* put it back to stream */            if (Char2 == '\n')              break;          }        }        if (cpp_comment && cpp_multiline == 0)          cpp_comment = 0;        if (c_comment || cpp_comment)          fputc (Char,  OutFile);        /* clear flag for the next round. if it is still clear after           next C++ comment line is processed, multiline C++ comment           is ended.        */        cpp_multiline = 0;      }    }    if (c_comment == 0 && cpp_comment == 0)      fputc (Char,  OutFile);  } /* while end */  if (argc == 3)    fclose (OutFile);  fclose (InFile);  fflush (stdout);  fprintf (stderr, "\nOK!\n");  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -