標記 (程式語言)
程式語言中的標記(英語: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的指令。
參照编辑
- 行號 (程式語言)
- Switch指令
參考資料编辑
- ^ 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).
🔥 Top keywords: Baike: 首页Special:搜索胖猫跳江事件背着善宰跑九龍城寨之圍城逆天奇案2璩静淚之女王歌手2024Energy (組合)新生 (网络剧)习近平匈牙利邊佑錫劉俊謙 (香港)金智媛神耆小子塞尔维亚金秀賢 (男演員)母亲节猩球崛起:王國誕生九龍寨城馴鹿寶貝家族榮耀之繼承者Seventeen (組合)六四事件不夠善良的我們张维为楊佩潔TripleS支配物种庆余年郭葦昀洪若潭命案金惠奫2024年英雄联盟季中邀请赛春色寄情人BABYMONSTER笑看風雲乘風2024排球少年!!角色列表破墓徐巧芯中华人民共和国中華民國打天下2WIND BREAKER—防風少年—习明泽排球少年!!彭丽媛磁暴ILLIT贾斯汀·比伯逆天奇案BOYNEXTDOOR猿人爭霸戰:猩凶革命張書偉我的婆婆怎麼那麼可愛我獨自升級怪獸8號謝坤達IVE (組合)與鳳行關於我轉生變成史萊姆這檔事角色列表黃道十二宮福建號航空母艦虽然不是英雄葉乃文五月天張員瑛草榴社区張文傑2024年花蓮地震极光香緹·摩爾迷宮飯呂家愷搜查班長1958日本劉德華海莉·鮑德溫蕭景鴻越位 (足球)葬送的芙莉蓮周處除三害 (電影)毛泽东願榮光歸香港林峯周雨彤伍允龍羅毓儀香港Baike: 分類索引沒有秘密猩球崛起:終極決戰角質層唐振剛柯佳嬿文化大革命