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