科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件C++程序设计从零开始之语句 (3)

C++程序设计从零开始之语句 (3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

C++程序设计从零开始之语句

作者:chuiyun 来源:BLOG 2007年10月28日

关键字: 设计 C++ Linux

  • 评论
  • 分享微博
  • 分享邮件

跳转语句——goto

前面已经说明,源代码(在此指用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时使用不同的标号就能跳到不同的位置。

应该注意上面故意让P1和P2定义时独占一行,其实也可以不用,即:

long a = 1;
P1: a += 1;
P2: b *= a;
goto P2;

因此看起来“P1:”和“P2:”好象是单独的一条定义语句,应该注意,准确地说它们应该是语句修饰符,作用是定义标号,并不是语句,即这样是错误的:

long a = 1;
P1: {
 a += 1;
 P2: b *= a;
 P3:
} goto P2;

上面的P3:将报错,因为其没有修饰任何语句。还应注意其中的P1仍然是3005,即“{}”仅仅只是其复合的作用,实际并不产生代码进而不影响语句的地址。

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章