標記 (程式語言)

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