標記 (程式語言)
程式語言中的標記(英語: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).