标记 (编程语言)

编程语言中的标记(英语:Label)是加在原始码中识别用的字符串,大部分的语言都将标记视为标识符,后面要加一个冒号作为识别。

在许多高级语言中标记会用来标示Goto指令的终点[1][2]。在汇编语言中标记则是用来标示跳跃指令(如JMP)的终点[3]。也时也会利用标记来作为程序的分段。FortranBASIC语言支持数字体的标记,也就是行号[4]。标记也在调试时用来识别已编译过程序的进入点。

用途

汇编语言

在汇编语言中要实现流程控制时,往往需要让程序计数器前移或后移一段距离(例如前移5个位元),移动的距离会因代码变动而不同,例如在某处增加(或删除)一行代码,程序中所有有越过更改代码的前移(及后移)指令都要重新计算需移动的距离。这样的程序在阅读时需经过计算才能知道任何跳跃指令的终点,程序的可读性显然不佳。

标记可以避免上述的问题。可以在程序任何需要的位置加上不同标记,跳跃指令直接指定其终点对应的标记,不需用人工计算程序计数器移动的距离。而且还可以使用有意义,可读性高的标记,更加提升程序的可读性。

以下是一段使用标记的汇编语言程序:

 mov $v0, 0
 MyLabel:                   ; 此處為一個名稱為MyLabel的標記
   add  $v0, $s0            ; 迴圈本體中的程式
   subi $t0, 1              ; 迴圈本體中的程式
 bne $t0, $zero, MyLabel    ; 條件跳躍至MyLabel標記處
                            ; 若指定條件不滿足,繼續執行後續的程式

高级语言

有些高级语言(例如C语言)允许在程序中加上标记,标示像Goto等直接跳跃指令的终点。不过这类指令若应用不当,很容易使得程序变得复杂而难以理解,即所谓的面条式代码

现代的高级语言提供许多结构化控制流程的指令,可以取代标记及直接跳跃指令。所以许多编程语言已不支持标记,或者只在极少数的场合下使用(如C#中的case)。

另一种可以取代标记及直接跳跃指令的是异常处理,一般会使用try和catch的指令。

引用

参考资料

  1. ^ C Standard section 6.8.6.1 The goto statement. [2011-03-16]. (原始内容存档于2007-12-24). 
  2. ^ GOTO Statement QuickSCREEN. Microsoft. 1988 [2008-07-03]. (原始内容存档于2009-07-25). 
  3. ^ O. Lawlor. nasm x86 Assembly. [2008-07-03]. (原始内容存档于2018-01-21). 
  4. ^ Differences Between GW-BASIC and QBasic. 2003-05-12 [2008-06-28]. (原始内容存档于2013-10-19).