ANSI X3.159-1989“編程語言 C”標準在“5.2.1.2 - 多位元組字符”一章中指出:
對于源字符集,應滿足以下條件:
- 注釋、字串文字、字符常量或標題名稱應以初始移位狀態開始和結束。
這是否意味著字串文字等應以字符開頭和結尾,由初始移位狀態的值表示,即單位元組值?或者這是否意味著環境應在處理某個字串文字等之前和之后將其當前移位狀態重置為初始移位狀態?
為什么這樣?- 即設定初始移位狀態的目的是什么,特別是在字串文字等的末尾?
uj5u.com熱心網友回復:
為什么 C 標準規定字串文字應以初始移位狀態開始和結束?
讓我們首先看看“轉變狀態”到底是什么意思(或與規范一樣):
多位元組字符可以具有與狀態相關的編碼,其中每個多位元組字符序列以初始移位狀態開始,并在序列中遇到特定多位元組字符時 進入其他實作定義的移位狀態。在初始移位狀態下,所有單位元組字符都保留其通常的解釋并且不會改變移位狀態。序列中后續位元組的解釋是當前移位狀態的函式。
要求字串文字以初始移位狀態開始和結束使字串語意更簡單且更可預測。如果你連接兩個字串,或者一個接一個地輸出它們,你可以確信它們的并置不會改變后者的含義。如果第一個可以以不同于初始狀態的換檔狀態終止,那么這將無法保證。
所有這一切的內在假設是語言級語意不知道任何特定字符編碼的細節。它們將所有字串視為位元組的黑盒,以空字符終止。
- 這是否意味著字串文字等應以字符開頭和結尾,由初始移位狀態的值表示,即單位元組值?或者這是否意味著環境應在處理某個字串文字等之前和之后將其當前移位狀態重置為初始移位狀態?
兩者都不。對于依賴于狀態的編碼,當前移位狀態是對編碼字符序列的解釋的運行屬性。字符不一定直接編碼移位狀態,但編碼方案提供了一種指定移位狀態變化的方法。
細節可能隨特定的編碼方案而變化,但編碼字符,無論是單位元組還是多位元組,通常并不固有地處于特定的移位狀態。這種編碼的重點是相同的子序列可以根據移位狀態進行不同的解釋。因此,從初始移位狀態開始是關于如何解釋多位元組字符序列的斷言,并且僅暗示關于字串文字必須包含什么的陳述。
另一方面,以初始移位狀態結束是對字串等內容的約束。如果字串文字等的位元組,則 AC 源檔案格式不正確。內部,解釋為從初始移位狀態開始,對一個或多個狀態移位進行編碼,使得位元組序列末尾的移位狀態與初始移位狀態不同。這正是為了讓實作不必擔心編碼問題,并且絕對不需要它執行任何型別的移位狀態清理。
- 為什么這樣?- 即設定初始移位狀態的目的是什么,特別是在字串文字等的末尾?
它簡化了語言并提高了以狀態相關源編碼撰寫的 C 源檔案的可維護性。接受用戶定義的自由(ish)文本的每個單元都是模塊化的——無論周圍的背景關系如何,它都具有相同的、明確定義的含義,并且移動、復制或洗掉這些單元不能改變周圍標記的詞匯解釋。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485104.html
上一篇:如何以編程方式確定gstreamer元素是否為Bin?
下一篇:如果有效,以下omp如何并行?
