回 帖 发 新 帖 刷新版面

主题:[原创]<C++ Primer>翻译-chapter 1-1.3

1.3 关于注释

在我们编写出更复杂的程序之前,我们应该先了解一下怎样注释C++程序。注释使我们的程序更适于阅读。程序的注释有多种形式,通常包括程序所使用算法的概述,对程序之所以定义某个变量而给输出的说明,对一段看似含糊的代码所给出的详细说明。注释部分的多少不会影响到可执行程序的大小,编译器在编译的时候会忽略掉程序的所有注释。

     NOTE:为了使注释部分与程序代码更容易区别,本书所有程序中所用注释文字字体均为斜体。在实际编程过程中,编程环境可能提供不同的方法来达到上述目的。

在C++中有两种类型的注释:行注释和成对的标记的注释。行注释在一行开头使用双斜线(//),在此之后的一行的内容都会被编译器忽略掉。

另一种注释使用成对的标记(/* */),这种标记继承自C语言。注释内容在标记/* 和 */之间,也就是说编译器会忽略掉两个标记之间的所有内容。

   #include <iostream>
   /* Simple main function: Read two numbers and write their sum */
   int main()
   {
       // prompt user to enter two numbers
       std::cout << "Enter two numbers:" << std::endl;
       int v1, v2;           // uninitialized
       std::cin >> v1 >> v2; // read input
       return 0;
   }

这种成对的标记可以放在程序的任何地方,标记之间被注释掉的部分可以包括一些格式控制符,如制表(tab),空格,换行符。这样注释部分可以跨越很多行,但应该显示的标明其中的每一行都是注释的一部分,我们的方法是在注释内容的每一行前都加一个星号“*”。

一般来说程序都混合使用两种方法来进行注释。使用成对标记由于可以跨行,所以可书写更多的注释内容,更适于对于若干行程序代码进行解释说明。而使用双斜线的行注释方法则被用于对一行代码的注释。

太多地注释内容使整个程序地代码看起来有点混乱。经常使用的的方法是把注释放在所要解释代码地上方。

如果对程序源代码做了修改,那么同时也应该更新对应的注释部分。尽管很多系统文档(也是一种程序代码的说明)是出了名的没有实效性,但程序员还是应该保证注释部分的时效性,也可以说是保证了注释的准确性,这样的注释才更有意义。程序源文件存在不准确的注释比没有注释的情况还要糟,这样会误导后来的阅读者。

不允许嵌套

使用/* 和 */的成对注释标记是不允许嵌套的,就是说在他们之间不能在插入同样的成对标记(/* 和 */)。如果这样做不但可能无法编译,而且得到的编译错误信息也是文不对题,使程序员找不到真正的错误。试编译下面的程序,看看会发生什么结果。

   #include <iostream>
   /*
    * comment pairs /* */ cannot nest.
    * "cannot nest" is considered source code,
    * as is the rest of the program
    */
   int main()
   {
       return 0;
   }

使用成对注释标记,我们可以很方便的临时注释掉一段程序代码。但如果这段代码已经包含了一对注释标记(/*和*/),那么随之而来的问题使发生了嵌套,使新增加的注释内容过早的结束。解决这个问题的最好的方法是,在临时注释掉的代码每一行的前面加上行注释标记(//),这样做以后,你就不必在意代码中是否有成对的注释标记。

回复列表 (共5个回复)

沙发

C++ Primer 第四版的中译都已经出来了,你为什么还要翻译呢?
不如你去翻译 ReliSoft 的 Windows API Tutorials
http://www.relisoft.com/win32/index.htm

板凳

由于现在有大把的时间,想找点事做,
就翻译点简单的东西,
至于太难的东西看不懂,所以不敢乱翻!

现在手头只有《c++ primer》,《C专家编程》,《windows程序设计》的英文版
不幸的是这三本书都有中文版了。

3 楼

支持楼主向你学习

4 楼

佩服樓主的精神,不過現在流行拿來主義,別人有好的就先用着,畢竟做什麽都是要時間的阿,注重效率的年代。

5 楼

[quote]佩服樓主的精神,不過現在流行拿來主義,別人有好的就先用着,畢竟做什麽都是要時間的阿,注重效率的年代。[/quote]


只是想磨练一下自己的翻译能力,

但结果发现自己的母语太差,呵呵

int q(int n,int m)//整数划分问题
{
    if(m == 0) return 0;
    if(m == 1) return 1;
    if(n <= m){
        return q(n,n-1)+1;
    }
    return q(n,m-1)+q(n-m,m);
//拆分形式可分为两种,一种包含 m, 一种不包含 m。
}                            
int main()
{
printf("%d",q(150-10,10));
getchar();
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册