C语言中如何注释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中如何注释相关的知识,希望对你有一定的参考价值。

main( )

int
a=0,b=0;

a =10; /*给a赋值

b=20; 给b赋值 */

printf("a+b=%d\n",a+b); /*输出计算结果*/


这代表注释的哪部分呢?

一般来讲有两种:
一是单行注释:直接在该行需要注释的地方加上"//"就行了。例如:
"int a,b;//这是一个注释行"。那么,"//"后面的部分"这是一个注释行"就被注释掉了,不起作用,但是"//"前面的“int a,b;"不受影响。
另外还有一种是多行同时注释:
/*
int a,b;
int c,d;
*/
其中"/*"和"*/"起限定范围的作用,该范围内的语句都会被注释掉,将不再起作用。当然,多行注释也是可以用来单行注释的
参考技术A main( )

     int
a=0,b=0;

a =10;            /*给a赋值

b=20;              给b赋值 */

printf("a+b=%d\\n",a+b);   /*输出计算结果*/

看上图,绿色部分都是被注释部分。

在新的C++标准中,推荐使用//进行注释而不是/**/,因为后者容易产生误编译。

main( )
     
int
a=0,b=0;
a =10;            //*给a赋值
b=20;             // 给b赋值 */
printf("a+b=%d\\n",a+b);   //*输出计算结果*/

参考技术B /*给a赋值

b=20; 给b赋值 */

这些内容都被注释了,包括b=20 ,/* 中间的部分都是注释,可以多行*/追问

请问a=10 在不在注释范围内呢

追答

因为a=10 不在/**/范围内啊。 /*这是注释开始的地方 */这是注释结束的地方

追问

万分 感谢 那a+b 最终结果等于多少呢

追答

a是10 b是0 结果是 10

追问

为什么b是0呢 不是20么 没懂

本回答被提问者采纳
参考技术C 答:在用C语言编程时,常用的注释方式有如下几种:
(1)单行注释 //…
(2)多行注释 /*…*/
(3)条件编译注释 #if 0…#endif
拓展资料:

对于(1),注释只能显示在一行内,通常出现在一条语句的右边或者上方,对于注释符”//”,一个注释里只要有多余2个’/’都可以。
对于(2),”/*…*/”不能嵌套使用,正如”if…else”中的”else”总是和隔它最近的”if”配对一样,”/*”总是和离它最近的”*/”相配对。
针对(1)和(2)各自的缺陷,资深的程序员提出如(3)所示的注释,该注释的好处是能注释大块的程序,并且没有嵌套的限制,也就是说在”#if 0…#endif”的”…”处可以有”//”或”/*…*/”这样的注释。
参考技术D //为同一行后面的内容,
/*为中间的内容*/

你的给a赋值和给b赋值应该用//,两斜杠

注释转换——(小项目)


      一门计算机语言如果想要运用的得心应手,离不开长久的练习,针对C语言的用法,下面主要是用C语言来解决注释转换的问题,C语言中注释是以/*开始,以*/结束,C++语言中可以通过//来注释,这里不考虑C++语言向下兼容C语言的特点,主要是想将/*       */注释符转换为//     。对于各种的注释情况,程序中能够实现各种各样的注释能够进行转换。

 

     以下是一般人在编写程序时“注释”的各种情况,这里的情况可能不够完整,需要以后碰见其他的情况来对程序进行修改和补充。

 

// 1.一般情况
/* int i = 0; */

// 2.换行问题
/* int i = 0; */int j = 0;
/* int i = 0; */
int j = 0;

// 3.匹配问题
/*int i = 0;/*xxxxx*/

// 4.多行注释问题
/*
int i=0;					 
int j = 0;
int k = 0;
*/int k = 0;

// 5.连续注释问题
/**//**/

// 6.连续的**/问题
/***/

// 7.C++注释问题
// /*xxxxxxxxxxxx*/

// 8.C注释本身不匹配
/* int i = 0;


下面是具体的程序代码:

#pragma once

#include <assert.h>
#include <errno.h>

typedef enum State     //解决匹配问题     /*int i = 0;/*int j = 0;*/
{
    C_Start,
    C_End,
};

void convert(FILE * fin, FILE * fout)   //针对各种的注释进行转换
{
    char first, second;
    assert(fin);
    assert(fout);
    
    State tag = C_End;
    do
   {
       first = fgetc(fin);    //fgetc函数的功能是读取字符
       switch (first)
       {
           case ‘/‘:                //解决/*int i = 0;*/
               second = fgetc(fin);
               if (second == ‘*‘)
              {
                  if (tag == C_End)
                  {
                      fputc(‘/‘, fout);
                      fputc(‘/‘, fout);
                      tag = C_Start;
                   }
                  else
                  {
                      fputc(‘/‘, fout);
                      fputc(‘*‘, fout);
                   }
              }
              else if (second == ‘/‘)
             {
                 char next;
                 fputc(first, fout);
                 fputc(second, fout);
                 //解决c++注释嵌套c注释的问题
                  do
                 {
                     next = fgetc(fin);
                     fputc(next, fout);
                     if (next == EOF)    //解决c++注释后面多写EOF的情况
                    { 
                        return;
                     }
                 }while (next != ‘\n‘);
             }
             else
             {
                 fputc(first, fout);
                 fputc(second, fout);
              }
             break;
        case ‘\n‘:
            //处理多行注释问题
            fputc(‘\n‘, fout);
            if (tag == C_Start)
            {
                fputc(‘/‘, fout);
                fputc(‘/‘, fout);
             }
            break;
        case ‘*‘:
            second = fgetc(fin);
            if (second == ‘/‘)
           {
               char next = fgetc(fin);
               //处理连续注释问题
               if (next == ‘/‘)
               {
                   fputc(‘\n‘, fout);
                   fseek(fin, -1, SEEK_CUR);      
                   //fseek函数是将fin指针进行向前移位,具体的功能查文档进行解答
                }
               else if (next != ‘\n‘ && next != EOF)    //解决/*int i = 0;*/int j = 0;
               {
                   fputc(‘\n‘, fout);
                   fputc(next, fout);
               }
               else
              {
                  //解决/*int i = 0;*/ /n int j = 0;
                  fputc(‘\n‘, fout);     
              }
              tag = C_End;
          }
           else if (second == ‘*‘)
          {
              fputc(‘*‘, fout);
              fseek(fin, -1, SEEK_CUR);
           }
          else
          {
              fputc(first, fout);
              fputc(second, fout);
          }
          break;
      default:
          fputc(first, fout);     //将first读取的字符串写入fout指定的文件中
          break;
      }
    } while (first != EOF);
}


void Annotation(const char * inputFile, const char * outputFile)
{
     FILE * Fin, * Fout;    //定义两个文件指针
     Fin = fopen(inputFile, "r");     //“r”表示读操作
     if (Fin == NULL)
     {
         printf("打开文件%s失败!errno:%d\n", inputFile, errno);
         return;
     }
     
     Fout = fopen(outputFile, "w");    //"w"表示写操作
     if (Fout == NULL)
     {
         fclose(Fin);    //fclose关闭文件
         printf("打开文件%s失败!errno:%d\n", outputFile, errno);
         return;
     }
     
     convert(Fin, Fout);
     
     fclose(Fin);
     fclose(Fout);
}



本文出自 “无心的执着” 博客,谢绝转载!

以上是关于C语言中如何注释的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C 语言中将所有 // 注释更改为 /* */ 注释? [关闭]

C语言中多行注释的用法

C语言中多行注释的用法

c语言中注释的位置

C语言注释转c++注释

C语言程序,跪求注释,明天就要答辩了