标记 (程式语言)

程式语言中的标记(英语: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).