• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C# 語言規范--2.5.4 條件編譯指令

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    C# 語言規范--2.5.4 條件編譯指令: 條件編譯指令用于按條件包含或排除源文件中的某些部分。 pp-conditional: (pp 條件:) pp-if-sectionpp-elif-sections opt pp-else-section opt pp-endif (pp if 節 pp elif 節可選 pp else 節可選 pp endif) pp-if-s
    C# 語言規范--2.5.4 條件編譯指令:

    條件編譯指令用于按條件包含或排除源文件中的某些部分。

    pp-conditional:(pp 條件:)
    pp-if-section   pp-elif-sectionsopt   pp-else-sectionopt   pp-endif(pp if 節   pp elif 節可選   pp else 節可選   pp endif)
    pp-if-section:(pp if 節:)
    whitespaceopt   #   whitespaceopt   if   whitespace   pp-expression   pp-new-line   conditional-sectionopt(空白可選   #   空白可選   if   空白   pp 表達式   pp 新行   條件節可選)
    pp-elif-sections:(pp elif 節:)
    pp-elif-section(pp elif 節)
    pp-elif-sections   pp-elif-section(pp elif 節   pp elif 節)
    pp-elif-section:(pp elif 節:)
    whitespaceopt   #   whitespaceopt   elif   whitespace   pp-expression   pp-new-line   conditional-sectionopt(空白可選   #   空白可選   elif   空白   pp 表達式   pp 新行   條件節可選)
    pp-else-section:(pp-else 節:)
    whitespaceopt   #   whitespaceopt   else   pp-new-line   conditional-sectionopt(空白可選   #   空白可選   else   pp 新行   條件節可選)
    pp-endif:
    whitespaceopt   #   whitespaceopt   endif   pp-new-line(空白可選   #   空白可選   endif   pp 新行)
    conditional-section:(條件節:)
    input-section(輸入節)
    skipped-section(跳過節)
    skipped-section:(跳過節:)
    skipped-section-part(跳過節部分)
    skipped-section   skipped-section-part(跳過節   跳過節部分)
    skipped-section-part:(跳過節部分:)
    skipped-charactersopt   new-line(跳過字符可選   新行)
    pp-directive(pp 指令)
    skipped-characters:(跳過字符:)
    whitespaceopt   not-number-sign   input-charactersopt(空白可選   非數字符號   輸入字符可選)
    not-number-sign:(非數字符號:)
    除 # 外的任何輸入字符

    按照語法的規定,條件編譯指令必須寫成集的形式,集的組成依次為:一個 #if 指令、一個或多個 #elif 指令(或沒有)、一個或多個 #else 指令(或沒有)和一個 #endif 指令。指令之間是源代碼的條件節。每節代碼直接位于它前面的那個指令控制。條件節本身可以包含嵌套的條件編譯指令,前提是這些指令構成完整的指令集。

    “pp 條件”最多只能選擇一個它所包含的“條件節”去做通常的詞法處理:

    • 按順序計算 #if#elif 指令的“pp 表達式”直到獲得值 true。如果表達式的結果為 true,則選擇對應指令的“條件節”。
    • 如果所有“pp 表達式”的結果都為 false 并且存在 #else 指令,則選擇 #else 指令的“條件節”。
    • 否則不選擇任何“條件節”。

    選定的“條件節”(若有)按正常的“輸入節”處理:節中包含的源代碼必須符合詞法文法;從節中的源代碼生成標記;節中的預處理指令具有規定的效果。

    剩余的“條件節”(若有)按“跳過節”處理:除了預處理指令,節中的源代碼不必一定要符合詞法文法;不從節中的源代碼生成任何詞法標記;節中的預處理指令必須在詞法上正確,但不另外處理。在按“跳過節”處理的“條件節”中,任何嵌套的“條件節”(包含在嵌套的 #if...#endif#region...#endregion 構造中)也按“跳過節”處理。

    下面的示例闡釋如何嵌套條件編譯指令:

    #define Debug      // Debugging on#undef Trace      // Tracing offclass PurchaseTransaction{   void Commit() {      #if Debug         CheckConsistency();         #if Trace            WriteToLog(this.ToString());         #endif      #endif      CommitHelper();   }}

    除預處理指令外,跳過的源代碼與詞法分析無關。例如,盡管在 #else 節中有未結束的注釋,但下面的示例仍然有效:

    #define Debug      // Debugging onclass PurchaseTransaction{   void Commit() {      #if Debug         CheckConsistency();      #else         /* Do something else      #endif   }}

    但請注意,即使是在源代碼的跳過節中,也要求預處理指令在詞法上正確。

    當預處理指令出現在多行輸入元素的內部時,不作為預處理指令處理。例如,程序:

    class Hello{   static void Main() {      System.Console.WriteLine(@"hello, #if Debug      world#else      Nebraska#endif      ");   }}

    輸出結果為:

    hello,#if Debug      world#else      Nebraska#endif

    在特殊的情況下,如何處理預處理指令集可能取決于 pp 表達式的計算。示例:

    #if X   /* #else   /* */ class Q { }#endif 

    總是產生同樣的標記流 (class Q { }),不管是否定義了 X。如果定義了 X,由于多行注釋的緣故,只處理 #if#endif 指令。如果未定義 X,則這三個指令(#if、#else、#endif)是指令集的組成部分。



    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>