标记 (程式语言)
程式语言中的标记(英语:Label)是加在源代码中识别用的字串,大部份的语言都将标记视为标识符,后面要加一个冒号作为识别。
在许多高阶语言中标记会用来标示Goto
指令的终点[1][2]。在组合语言中标记则是用来标示跳跃指令(如JMP
)的终点[3]。也时也会利用标记来作为程式的分段。Fortran及BASIC语言支援数字型的标记,也就是行号[4]。标记也在调试时用来识别已编译过程式的进入点。
用途
编辑组合语言
编辑在组合语言中要实现流程控制时,往往需要让程式计数器前移或后移一段距离(例如前移5个位元),移动的距离会因程式码变动而不同,例如在某处增加(或删除)一行程式码,程式中所有有越过更改程式码的前移(及后移)指令都要重新计算需移动的距离。这样的程式在阅读时需经过计算才能知道任何跳跃指令的终点,程式的可读性显然不佳。
标记可以避免上述的问题。可以在程式任何需要的位置加上不同标记,跳跃指令直接指定其终点对应的标记,不需用人工计算程式计数器移动的距离。而且还可以使用有意义,可读性高的标记,更加提升程式的可读性。
以下是一段使用标记的组合语言程式:
mov $v0, 0
MyLabel: ; 此處為一個名稱為MyLabel的標記
add $v0, $s0 ; 迴圈本體中的程式
subi $t0, 1 ; 迴圈本體中的程式
bne $t0, $zero, MyLabel ; 條件跳躍至MyLabel標記處
; 若指定條件不滿足,繼續執行後續的程式
高阶语言
编辑有些高阶语言(例如C语言)允许在程式中加上标记,标示像Goto等直接跳跃指令的终点。不过这类指令若应用不当,很容易使得程式变得复杂而难以理解,即所谓的面条式代码。
现代的高阶语言提供许多结构化控制流程的指令,可以取代标记及直接跳跃指令。所以许多程式语言已不支援标记,或者只在极少数的场合下使用(如C#中的case)。
另一种可以取代标记及直接跳跃指令的是异常处理,一般会使用try和catch的指令。
参照
编辑参考资料
编辑- ^ C Standard section 6.8.6.1 The goto statement. [2011-03-16]. (原始内容存档于2007-12-24).
- ^ GOTO Statement QuickSCREEN. Microsoft. 1988 [2008-07-03]. (原始内容存档于2009-07-25).
- ^ O. Lawlor. nasm x86 Assembly. [2008-07-03]. (原始内容存档于2018-01-21).
- ^ Differences Between GW-BASIC and QBasic. 2003-05-12 [2008-06-28]. (原始内容存档于2013-10-19).