long a = 1;
a += 1; /* a放的是人的个数,让人的个数加一 */
b *= a; /* b放的是人均花费,得到总的花费 */
上面就分别针对a += 1;和b *= a;写了两条注释语句以说明各自的语义(因为只要会C++都知道它们是一个变量的自增一和另一个变量的自乘a,但不知道意义)。上面的麻烦之处就是需要写“/*”和“*/”,有点麻烦,故C++又提供了另一种注释语句——“//”: long a = 1;
a += 1; // a放的是人的个数,让人的个数加一
b *= a; // b放的是人均花费,得到总的花费
上面和前面等效,其中的“//”表示从它开始,这一行后面的所有字符均看成注释,编译器将不予理会,即 long a = 1; a += 1; // a放的是人的个数,让人的个数加一 b *= a;
其中的b *= a;将不会被编译,因为前面的“//”已经告诉编译器,从“//”开始,这一行后面的所有字符均是注释,故编译器不会编译b *= a;。但如果 long a = 1; a += 1; /* a放的是人的个数,让人的个数加一 */ b *= a;
这样编译器依旧会编译b *= a;,因为“/*”和“*/”括起来的才是注释。
前面已经说明,源代码(在此指用C++编写的代码)中的语句依次地转变成用长度不同的二进制数表示的机器代码,然后顺序放在内存中(这种说法不准确)。如下面这段代码: long a = 1; // 假设长度为5字节,地址为3000
a += 1; // 则其地址为3005,假设长度为4字节
b *= a; // 则其地址为3009,假设长度为6字节
上面的3000、3005和3009就表示上面3条语句在内存中的位置,而所谓的跳转语句,也就是将上面的3000、3005等语句的地址放到前面提过的指令寄存器中以使得CPU开始从给定的位置执行以表现出执行顺序的改变。因此,就必须有一种手段来表现语句的地址,C++对此给出了标号(Label)。
写一标识符,后接“:”即建立了一映射,将此标识符和其所在位置的地址绑定了起来,如下: long a = 1; // 假设长度为5字节,地址为3000
P1:
a += 1; // 则其地址为3005,假设长度为4字节
P2:
b *= a; // 则其地址为3009,假设长度为6字节
goto P2;
上面的P1和P2就是标号,其值分别为3005和3009,而最后的goto就是跳转语句,其格式为goto <标号>;。此语句非常简单,先通过“:”定义了一个标号,然后在编写goto时使用不同的标号就能跳到不同的位置。