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

📄 c_cmnt.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
/* Extract comments from a C program source file.**** This program acts as a filter to copy comments in a C source** file to the output.  Each comment includes the starting and** ending delimiters and is followed by a newline.**** Three #ifdef options are defined:**   INHIBIT_TRIGRAPHS prevents recognition of trigraphs, which**      can affect detection of escaped characters,**      i.e., ??/" is an escaped quote.**   TRANSLATE_TRIGRAPHS causes the output to have trigraphs**      converted to the normal C characters.**   CPP_MODE causes "//" to start a comment.** The default for these symbols is undefined, resulting in** operation on strict ANSI source, except as noted below.**** What makes this program interesting is that comment detection** should be inhibited within strings and character constants.**** Note: The name of a header following #include can, under ANSI,** contain any sequence of characters, except \n and the closing** > or ".  This program doesn't inhibit comment, string, or character** constant detection within the header name, as an ANSI parser must.**** Written by and contributed to the public domain by** Thad Smith III,   Boulder, CO,  October 1990.*/#include <stdio.h>#ifndef INHIBIT_TRIGRAPHS        /* default: recognize trigraphs */ #define getnc()  getnsc(1)       /* get char with trigraph xlate */ #ifdef TRANSLATE_TRIGRAPHS  #define getcmtc() getnsc(1)     /* get comment char w/ t.g. xlate */ #else  #define getcmtc() getnsc(0)     /* default: no comment t.g. xlate */ #endif/***  get next source character or EOF*/int getnsc(int cvtg)             /* boolean: convert trigraphs */{      static int c, nc, nnc;     /* next 3 characters */      /* shift in next source character */      c = nc;  nc = nnc;   nnc = getchar();      /* perform trigraph substitution */      if (cvtg && c == '?' && nc == '?')      {            switch (nnc)            {            case '=' :                  c = '#' ;                  break;            case '(' :                  c = '[' ;                  break;            case '/' :                  c = '\\';                  break;            case ')' :                  c = ']' ;                  break;            case '\'':                  c = '^' ;                  break;            case '<' :                  c = '{' ;                  break;            case '!' :                  c = '|' ;                  break;            case '>' :                  c = '}' ;                  break;            case '-' :                  c = '~' ;                  break;            default  :                  return c;        /* no substitution */            }            nc = getchar();   nnc = getchar();      }      return c;}#else       /* don't process trigraphs */ #define getnc()   getchar() #define getcmtc() getchar()#endifint main(void){      int pc;  /* previous character      */      int c;   /* current input character */#ifndef INHIBIT_TRIGRAPHS      getnc();                                        /* prime the pump */      getnc();#endif      c = getnc();                                    /* get first char */      for (;;)                                  /* in non-comment area */      {            switch (c)            {            case '/':                     /* possible start of comment */                  if ((c= getnc()) == '*')      /* process comment */                  {                        putchar('/');                        putchar('*');                        /* copy comment to stdout */                        for (pc = 0; (c = getcmtc()) != EOF &&                              (putchar(c) != '/' || pc != '*'); pc=c)                                    ;                              putchar('\n');#ifdef CPP_MODE                  }                  else if (c == '/')      /*  '//' comment */                  {                        putchar('/');                        putchar('/');                        while ((c = getcmtc()) != EOF && putchar(c) != '\n')                              ;#endif                  }                  else  continue;         /* test current char */                  break;            case '\"':                                /* start of string */            case '\'':    /* start of (possibly multi-byte) char constant */                  pc = c;                             /* save delimiter */                  do                      /* scan through character constant,                                          ** discarding escape chars                                          */                  {                        while ((c = getnc()) == '\\')                              getnc();                  } while (c != pc && c != EOF);                  break;            }            if (c == EOF)                  return 0;            else  c = getnc();      }}

⌨️ 快捷键说明

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