C99标准 6.1 记法(Notation)

前言

  附录的语法类别中由中文括号()括起的中文是我为了方便自己阅读而标注的中文翻译,未使用斜体,原文中并无此部分。由于本人翻译水平有限,某些专业名词可能翻译不准确,如果您有更准确的翻译建议请在下方评论指出,谢谢。

C99标准 6.1 记法(Notation)

  在此条款中使用的语法记法中,语法类别(非终结符)用 斜体 表示,字面值和字符集成员(终结符)用 粗体 表示。非终结符后面的冒号(:)引入了它的定义。可选的定义在单独的行中列出,除非以 " one of " 作为前缀。一个可选符号由下标 " opt " 表示,所以

    { expressionopt }

  指示用大括号括起来的可选表达式

  当在主要文本中引用语法类别时,它们不会被斜体显示,单词之间用空格分隔,而不是连字符。

  附件A对该语言的语法进行了总结。
  
  

附录A
语言语法总结

  
注意:记法在6.1中描述

A.1 词法语法(Lexical grammar)
A.1.1 词法元素(Lexical elements)

(6.4)token(符号):
      keyword(关键字)
      identifier(标识符)
      constant(常量)
      string-literal(字符串字面量)
      punctuator(标点符号)

(6.4)preprocessing-token(预处理符号):
      header-name(头文件名)
      identifier(标识符)
      pp-number(预处理数字)
      character-constant(字符常量)
      string-literal(字符串字面量)
      punctuator(标点符号)
      each non-white-space character that cannot be one of the above

A.1.2 关键字(Keywords)

(6.4.1)keyword: one of
      auto    enum    restrict    unsigned
      break    extern    return     void
      case    float     short     volatile
      char    for      signed    while
      const    goto     sizeof     _Bool
      continue  if      static     _Complex
      default   inline    struct     _Imaginary
      do     int      switch
      double   long     typedef
      else     register   union

A.1.3 标识符(Identifiers)

(6.4.2.1)identifier(标识符):
      identifier-nondigit(非数字标识符)
      identifier identifier-nondigit(标识符 非数字标识符)
      identifier digit(标识符 数字)

(6.4.2.1)identifier-nondigit(非数字标识符):
      nondigit(非数字)
      universal-character-name(通用字符名)
      other implementation-defined characters(其他实现定义的字符)

(6.4.2.1)nondigit(非数字): one of
      _ a b c d e f g h i j k l m
      n o p q r s t u v w x y z
      A B C D E F G H I J K L M
      N O P Q R S T U V W X Y Z

(6.4.2.1)digit(数字): one of
      0 1 2 3 4 5 6 7 8 9

A.1.4 通用字符名(Universal character names)

(6.4.3)universal-character-name:
      \u hex-quad\u 四位十六进制)
      \U hex-quad hex-quad\U 四位十六进制 四位十六进制)

(6.4.3)hex-quad(四位十六进制):
      hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit(十六进制数字 十六进制数字 十六进制数字 十六进制数字)

A.1.5 常量(Constants)

(6.4.4)constant(常量):
      integer-constant(整型常量)
      floating-constant(浮点常量)
      enumeration-constant(枚举常量)
      character-constant(字符常量)

(6.4.4.1)integer-constant(整型常量):
      decimal-constant integer-suffixopt(十进制常量 整型后缀可选
      octal-constant integer-suffixopt(八进制常量 整型后缀可选
      hexadecimal-constant integer-suffixopt(十六进制常量 整型后缀可选

(6.4.4.1)decimal-constant(十进制常量):
      nonzero-digit(非零数字)
      decimal-constant digit(十进制常量 数字)

(6.4.4.1)octal-constant(八进制常量):
      0
      octal-constant octal-digit(八进制常量 八进制数字)

(6.4.4.1)hexadecimal-constant(十六进制常量):
      hexadecimal-prefix hexadecimal-digit(十六进制前缀 十六进制数字)
      hexadecimal-constant hexadecimal-digit(十六进制常量 十六进制数字)

(6.4.4.1)hexadecimal-prefix(十六进制前缀): one of
      0x 0X

(6.4.4.1)nonzero-digit(非零数字): one of
      1 2 3 4 5 6 7 8 9

(6.4.4.1)octal-digit(八进制数字): one of
      0 1 2 3 4 5 6 7

(6.4.4.1)hexadecimal-digit(十六进制数字): one of
      0 1 2 3 4 5 6 7 8 9
      a b c d e f
      A B C D E F

(6.4.4.1)integer-suffix(整型后缀):
      unsigned-suffix long-suffixopt(无符号整型后缀 长整型后缀可选
      unsigned-suffix long-long-suffix(无符号整型后缀 双长整型后缀)
      long-suffix unsigned-suffixopt(长整型后缀 无符号整型后缀可选
      long-long-suffix unsigned-suffixopt(双长整型后缀 无符号整型后缀可选

(6.4.4.1)unsigned-suffix(无符号整型前缀): one of
      u U

(6.4.4.1)long-suffix(长整型后缀): one of
      l L

(6.4.4.1)long-long-suffix(双长整型后缀): one of
      ll LL

(6.4.4.2)floating-constant(浮点常量):
      decimal-floating-constant(十进制浮点常量)
      hexadecimal-floating-constant(十六进制浮点常量)

(6.4.4.2)decimal-floating-constant(十进制浮点常量):
      fractional-constant exponent-partopt floating-suffixopt(小数常量 指数部分可选 浮点后缀可选
      digit-sequence exponent-part floating-suffixopt(数字序列 指数部分 浮点后缀可选

(6.4.4.2)hexadecimal-floating-constant(十六进制浮点常量):
      hexadecimal-prefix hexadecimal-fractional-constant binary-exponent-part floating-suffixopt(十六进制前缀 十六进制小数常量 二进制指数部分 浮点后缀可选
      hexadecimal-prefix hexadecimal-digit-sequence binary-exponent-part floating-suffixopt (十六进制前缀 十六进制数字序列 二进制指数部分 浮点后缀可选

(6.4.4.2)fractional-constant(小数常量):
      digit-sequenceopt . digit-sequence(数字序列可选 . 数字序列)
      digit-sequence .(数字序列 .

(6.4.4.2)exponent-part(指数部分):
      e signopt digit-sequencee 符号可选 数字序列)
      E signopt digit-sequenceE 符号可选 数字序列)

(6.4.4.2)sign(符号): one of
      +-

(6.4.4.2)digit-sequence(数字序列):
      digit(数字)
      digit-sequence digit(数字序列 数字)

(6.4.4.2)hexadecimal-fractional-constant(十六进制小数常量):
      hexadecimal-digit-sequenceopt . hexadecimal-digit-sequence(十六进制数字序列可选 . 十六进制数字序列)
      hexadecimal-digit-sequence .(十六进制数字序列 .

(6.4.4.2)binary-exponent-part(二进制指数部分):
      p signopt digit-sequencep 符号可选 数字序列)
      P signopt digit-sequenceP 符号可选 数字序列)

【译者注】这部分指数按2的幂来解析

(6.4.4.2)hexadecimal-digit-sequence(十六进制数字序列):
      hexadecimal-digit(十六进制数字)
      hexadecimal-digit-sequence hexadecimal-digit(十六进制数字序列 十六进制数字)

(6.4.4.2)floating-suffix(浮点后缀): one of
      f l F L

(6.4.4.3)enumeration-constant(枚举常量):
      identifier(标识符)

(6.4.4.4)character-constant(字符常量):
       c-char-sequence ' C字符序列 '
      L’ c-char-sequence 'L’ C字符序列 '

(6.4.4.4)c-char-sequence(C字符序列):
      c-char(C字符)
      c-char-sequence c-char(C字符序列 C字符)

(6.4.4.4)c-char(C字符):
      any member of the source character set except the single-quote ‘, backslash , or new-line character(源字符集的任何成员,单引号’、反斜杠\或换行字符除外)
      escape-sequence(转义序列)

(6.4.4.4)escape-sequence(转义序列):
      simple-escape-sequence(简单转义序列)
      octal-escape-sequence(八进制转义序列)
      hexadecimal-escape-sequence(十六进制转义序列)
      universal-character-name(通用字符名)

(6.4.4.4)simple-escape-sequence(简单转义序列): one of
      \’ \" \? \\
      \a \b \f \n \r \t \v

(6.4.4.4)octal-escape-sequence(八进制转义序列):
      \ octal-digit\ 八进制数字)
      \ octal-digit octal-digit\ 八进制数字 八进制数字)
      \ octal-digit octal-digit octal-digit\ 八进制数字 八进制数字 八进制数字)

(6.4.4.4)hexadecimal-escape-sequence(十六进制转义序列):
      \x hexadecimal-digit\x 十六进制数字)
      hexadecimal-escape-sequence hexadecimal-digit(十六进制转义序列 十六进制数字)

A.1.6 字符串字面量(String literals)

(6.4.5)string-literal(字符串字面量):
      " s-char-sequenceopt "" s字符序列 "
      L" s-char-sequenceopt "L" s字符序列 "

(6.4.5)s-char-sequence(s字符序列):
      s-char(s字符)
      s-char-sequence s-char(s字符序列 s字符)

(6.4.5)s-char(s字符):
      any member of the source character set except the double-quote ", backslash , or new-line character(源字符集的任何成员,双引号 "、反斜杠\或换行符除外)
      escape-sequence(转义序列)

A.1.7 标点符号(Punctuators)

(6.4.6)punctuator(标点符号): one of
      [ ] ( ) { } . ->
      ++ – & * + - ~ !
      / % << >> < > <= >= == != ^ | && ||
      ? : ; …
      = *= /= %= += -= <<= >>= &= ^= |=
      , # ##
      <: :> <% %> %: %:%:

A.1.8 头文件名(Header names)

(6.4.7)header-name(头文件名):
      < h-char-sequence >< h字符序列 >
      " q-char-sequence "" q字符序列 "

(6.4.7)h-char-sequence(h字符序列):
      h-char(h字符)
      h-char-sequence h-char(h字符序列 h字符)

(6.4.7)h-char(h字符):
      any member of the source character set except the new-line character and >(源字符集中除换行字符和>之外的任何成员)

(6.4.7)q-char-sequence(q字符序列):
      q-char(q字符)
      q-char-sequence q-char(q字符序列 q字符)

(6.4.7)q-char(q字符):
      any member of the source character set except the new-line character and "(源字符集的任何成员,除了换行字符和 "

A.1.9 预处理数字(Preprocessing numbers)

(6.4.8)pp-number(预处理数字):
      digit(数字)
      . digit. 数字)
      pp-number digit(预处理数字 数字)
      pp-number identifier-nondigit(预处理数字 非数字标识符)
      pp-number e sign(预处理数字 e 符号)
      pp-number E sign(预处理数字 E 符号)
      pp-number p sign(预处理数字 p 符号)
      pp-number P sign(预处理数字 P 符号)
      pp-number .(预处理数字 .

A.2 短语结构语法(Phrase structure grammar)
A.2.1 表达式(Expressions)

(6.5.1)primary-expression(基本表达式):
      identifier(标识符)
      constant(常量)
      string-literal(字符串字面量)
      ( expression )( 表达式 )

(6.5.2)postfix-expression(后缀表达式):
      primary-expression(基本表达式)
      postfix-expression [ expression ](后缀表达式 [ 表达式 ]
      postfix-expression ( argument-expression-listopt )(后缀表达式 ( 实参表达式列表可选 )
      postfix-expression . identifier(后缀表达式 . 标识符)
      postfix-expression -> identifier(后缀表达式 -> 标识符)
      postfix-expression ++(后缀表达式 ++
      postfix-expression --(后缀表达式 --
      ( type-name ) { initializer-list }( 类型名 ) { 初始化列表 }
      ( type-name ) { initializer-list , }( 类型名 ) { 初始化列表 , }

(6.5.2)argument-expression-list(实参表达式列表):
      assignment-expression(赋值表达式)
      argument-expression-list , assignment-expression(实参表达式列表 , 赋值表达式)

(6.5.3)unary-expression(一元表达式):
      postfix-expression(后缀表达式)
      ++ unary-expression++ 一元表达式)
      -- unary-expression-- 一元表达式)
      unary-operator cast-expression(单目运算符 强制类型转换表达式)
      sizeof unary-expressionsizeof 一元表达式)
      sizeof ( type-name )sizeof ( 类型名 )

(6.5.3)unary-operator(单目运算符): one of
      & * + - ~ !

(6.5.4)cast-expression(强制类型转换表达式):
      unary-expression(一元表达式)
      ( type-name ) cast-expression( 类型名 ) 强制类型转换表达式 )

(6.5.5)multiplicative-expression(乘法表达式):
      cast-expression(强制类型转换表达式)
      multiplicative-expression * cast-expression(乘法表达式 * 强制类型转换表达式)
      multiplicative-expression / cast-expression(乘法表达式 / 强制类型转换表达式)
      multiplicative-expression % cast-expression(乘法表达式 % 强制类型转换表达式)

(6.5.6)additive-expression(加法表达式):
      multiplicative-expression(乘法表达式)
      additive-expression + multiplicative-expression(加法表达式 + 乘法表达式)
      additive-expression - multiplicative-expression(加法表达式 - 乘法表达式)

(6.5.7)shift-expression(移位表达式):
      additive-expression(加法表达式)
      shift-expression << additive-expression(移位表达式 << 加法表达式)
      shift-expression >> additive-expression(移位表达式 >> 加法表达式)

(6.5.8)relational-expression(关系表达式):
      shift-expression(移位表达式)
      relational-expression < shift-expression(关系表达式 < 移位表达式)
      relational-expression > shift-expression(关系表达式 > 移位表达式)
      relational-expression <= shift-expression(关系表达式 <= 移位表达式)
      relational-expression >= shift-expression(关系表达式 >= 移位表达式)

(6.5.9)equality-expression(相等表达式):
      relational-expression(关系表达式)
      equality-expression == relational-expression(相等表达式 == 关系表达式)
      equality-expression != relational-expression(相等表达式 != 关系表达式)

(6.5.10)AND-expression(按位与表达式):
      equality-expression(相等表达式)
      AND-expression & equality-expression(按位与表达式 & 相等表达式)

(6.5.11)exclusive-OR-expression(按位异或表达式):
      AND-expression(按位与表达式)
      exclusive-OR-expression ^ AND-expression(按位异或表达式 ^ 按位与表达式)

(6.5.12)inclusive-OR-expression(按位或表达式):
      exclusive-OR-expression(按位异或表达式)
      inclusive-OR-expression | exclusive-OR-expression(按位或表达式 | 按位异或表达式)

(6.5.13)logical-AND-expression(逻辑与表达式):
      inclusive-OR-expression(按位或表达式)
      logical-AND-expression && inclusive-OR-expression(逻辑与表达式 && 按位或表达式)

(6.5.14)logical-OR-expression(逻辑或表达式):
      logical-AND-expression(逻辑与表达式)
      logical-OR-expression || logical-AND-expression(逻辑或表达式 || 逻辑与表达式)

(6.5.15)conditional-expression(条件表达式):
      logical-OR-expression(逻辑或表达式)
      logical-OR-expression ? expression : conditional-expression(逻辑或表达式 ? 表达式 : 条件表达式)

(6.5.16)assignment-expression(赋值表达式):
      conditional-expression(条件表达式)
      unary-expression assignment-operator assignment-expression(一元表达式 赋值运算符 赋值表达式)

(6.5.16)assignment-operator(赋值运算符): one of
      = *= /= %= += -= <<= >>= &= ^= |=

(6.5.17)expression(表达式):
      assignment-expression(赋值表达式)
      expression , assignment-expression(表达式 , 赋值表达式)

(6.6)constant-expression(常量表达式):
      conditional-expression(条件表达式)

A.2.2 声明(Declarations)

(6.7)declaration(声明):
      declaration-specifiers init-declarator-listopt ;(声明说明符 初始化声明符列表可选

(6.7)declaration-specifiers(声明说明符):
      storage-class-specifier declaration-specifiersopt(存储类型说明符 声明说明符可选
      type-specifier declaration-specifiersopt(类型说明符 声明说明符可选
      type-qualifier declaration-specifiersopt(类型限定符 声明说明符可选
      function-specifier declaration-specifiersopt(函数说明符 声明说明符可选

(6.7)init-declarator-list(初始化声明符列表):
      init-declarator(初始化声明符)
      init-declarator-list , init-declarator(初始化声明符列表 , 初始化声明符)

(6.7)init-declarator(初始化声明符):
      declarator(声明符)
      declarator = initializer(声明符 = 初始设定式)

(6.7.1)storage-class-specifier(存储类型说明符):
      typedef
      extern
      static
      auto
      register

(6.7.2)type-specifier(类型说明符):
      void
      char
      short
      int
      long
      float
      double
      signed
      unsigned
      _Bool
      _Complex
      _Imaginary
      struct-or-union-specifier(结构或联合说明符)
      enum-specifier(枚举说明符)
      typedef-name(定义类型名)

(6.7.2.1)struct-or-union-specifier(结构或联合说明符):
      struct-or-union identifieropt { struct-declaration-list }(结构或联合 标识符可选 { 结构声明列表 }
      struct-or-union identifier(结构或联合 标识符)

(6.7.2.1)struct-or-union(结构或联合):
      struct
      union

(6.7.2.1)struct-declaration-list(结构声明列表):
      struct-declaration(结构声明)
      struct-declaration-list struct-declaration(结构声明列表 结构声明)

(6.7.2.1)struct-declaration(结构声明):
      specifier-qualifier-list struct-declarator-list ;(说明符限定符列表 结构声明符列表 ;

(6.7.2.1)specifier-qualifier-list(说明符限定符列表):
      type-specifier specifier-qualifier-listopt(类型说明符 说明符限定符列表可选
      type-qualifier specifier-qualifier-listopt(类型限定符 说明符限定符列表可选

(6.7.2.1)struct-declarator-list(结构声明符列表):
      struct-declarator(结构声明符)
      struct-declarator-list , struct-declarator(结构声明符列表 , 结构声明符)

(6.7.2.1)struct-declarator(结构声明符):
      declarator(声明符)
      declaratoropt : constant-expression(声明符可选 : 常量表达式)

(6.7.2.2)enum-specifier(枚举说明符):
      enum identifieropt { enumerator-list }enum 标识符可选 { 枚举数列表 }
      enum identifieropt { enumerator-list , }enum 标识符可选 { 枚举数列表 , }
      enum identifierenum 标识符)

(6.7.2.2)enumerator-list(枚举数列表):
      enumerator(枚举数)
      enumerator-list , enumerator(枚举数列表 , 枚举数)

(6.7.2.2)enumerator(枚举数):
      enumeration-constant(枚举常量)
      enumeration-constant = constant-expression(枚举常量 = 常量表达式)

(6.7.3)type-qualifier(类型限定符):
      const
      restrict
      volatile

(6.7.4)function-specifier(函数说明符):
      inline

(6.7.5)declarator(声明符):
      pointeropt direct-declarator(指针可选 直接声明符)

(6.7.5)direct-declarator(直接声明符):
      identifier(标识符)
      ( declarator )( 声明符 )
      direct-declarator [ type-qualifier-listopt assignment-expressionopt ](直接声明符 [ 类型限定符列表可选 赋值表达式可选 ]
      direct-declarator [ static type-qualifier-listopt assignment-expression ](直接声明符 [ static 类型限定符列表可选 赋值表达式 ]
      direct-declarator [ type-qualifier-list static assignment-expression ](直接声明符 [ 类型限定符列表 static 赋值表达式 ]
      direct-declarator [ type-qualifier-listopt * ](直接声明符 [ 类型限定符列表可选 * ]
      direct-declarator ( parameter-type-list )(直接声明符 ( 形参类型列表 )
      direct-declarator ( identifier-listopt )(直接声明符 ( 标识符列表可选 )

(6.7.5)pointer(指针):
      * type-qualifier-listopt* 类型限定符列表可选
      * type-qualifier-listopt pointer* 类型限定符列表可选 指针)

(6.7.5)type-qualifier-list(类型限定符列表):
      type-qualifier(类型限定符)
      type-qualifier-list type-qualifier(类型限定符列表 类型限定符)

(6.7.5)parameter-type-list(形参类型列表):
      parameter-list(形参列表)
      parameter-list , …(形参列表 , …

(6.7.5)parameter-list(形参列表):
      parameter-declaration(形参声明)
      parameter-list , parameter-declaration(形参列表 , 形参声明)

(6.7.5)parameter-declaration(形参声明):
      declaration-specifiers declarator(声明说明符 声明符)
      declaration-specifiers abstract-declaratoropt(声明说明符 抽象声明符可选

(6.7.5)identifier-list(标识符列表):
      identifier(标识符)
      identifier-list , identifier(标识符列表 , 标识符)

(6.7.6)type-name(类型名):
      specifier-qualifier-list abstract-declaratoropt(说明符限定符列表 抽象声明符可选

(6.7.6)abstract-declarator(抽象声明符):
      pointer(指针)
      pointeropt direct-abstract-declarator(指针可选 直接抽象声明符)

(6.7.6)direct-abstract-declarator(直接抽象声明符):
      ( abstract-declarator )( 抽象声明符 )
      direct-abstract-declaratoropt [ assignment-expressionopt ](直接抽象声明符可选 [ 赋值表达式可选 ]
      direct-abstract-declaratoropt [*](直接抽象声明符可选 [*]
      direct-abstract-declaratoropt ( parameter-type-listopt )(直接抽象声明符可选 ( 形参类型列表可选 )

(6.7.7)typedef-name(定义类型名) :
      identifier(标识符)

(6.7.8)initializer(初始设定式):
      assignment-expression(赋值表达式)
      { initializer-list }{ 初始化表达式 }
      { initializer-list , }{ 初始化表达式 , }

(6.7.8)initializer-list(初始化列表):
      designationopt initializer(指定可选 初始设定式)
      initializer-list , designationopt initializer(初始化列表 , 指定可选 初始设定式)

(6.7.8)designator-list(指定符列表):
      designator(指定符)
      designator-list designator(指定符列表 指定符)

(6.7.8)designator(指定符):
      [ constant-expression ][ 常量表达式 ]
      . identifier. 标识符 )

A.2.3 语句(Statements)

(6.8)statement(语句):
      labeled-statement(标号语句)
      compound-statement(复合语句)
      expression-statement(表达式语句)
      selection-statement(选择语句)
      iteration-statement(循环语句)
      jump-statement(跳转语句)

(6.8.1)labeled-statement(标号语句):
      identifier : statement(标识符 : 语句)
      case constant-expression : statementcase 常量表达式 : 语句)
      default : statementdefault : 语句)

(6.8.2)compound-statement(复合语句):
      { block-item-listopt }{ 块项目列表可选 }

(6.8.2)block-item-list(块项目列表):
      block-item(块项目)
      block-item-list block-item(块项目列表 块项目)

(6.8.2)block-item(块项目):
      declaration(声明)
      statement(语句)

(6.8.3)expression-statement(表达式语句):
      expressionopt ;( 表达式可选 ;

(6.8.4)selection-statement(选择语句):
      if ( expression ) statementif ( 表达式 ) 语句)
      if ( expression ) statement else statementif ( 表达式 ) 语句 else 语句)
      switch ( expression ) statementswitch ( 表达式 ) 语句)

(6.8.5)iteration-statement(循环语句):
      while ( expression ) statementwhile ( 表达式 ) 语句)
      do statement while ( expression ) ;do 语句 while ( 表达式 ) ;
      for ( expressionopt ; expressionopt ; expressionopt ) statementfor ( 表达式可选 ; 表达式可选 ; 表达式可选 ) 语句)
      for ( declaration expressionopt ; expressionopt ) statementfor ( 声明 表达式可选 ; 表达式可选 ) 语句)

(6.8.6)jump-statement(跳转语句):
      goto identifier ;goto 标识符 ;
      continue ;
      break ;
      return expressionopt ;return 表达式可选 ;

A.2.4 (外部定义)External definitions

(6.9)translation-unit(翻译单元):
      external-declaration(外部声明)
      translation-unit external-declaration(翻译单元 外部声明)

(6.9)external-declaration(外部声明):
      function-definition(函数定义)
      declaration(声明)

(6.9.1)function-definition(函数定义):
      declaration-specifiers declarator declaration-listopt compound-statement(声明说明符 声明符 声明列表可选 复合语句)

(6.9.1)declaration-list(声明列表):
      declaration(声明)
      declaration-list declaration(声明列表 声明)

A.3 (预处理指令)Preprocessing directives

(6.10)preprocessing-file(预处理文件):
      groupopt(组可选

(6.10)group(组):
      group-part(组部分)
      group group-part(组 组部分)

(6.10)group-part(组部分):
      if-section(if段)
      control-line(控制行)
      text-line(文本行)
      # non-directive# 非指令)

(6.10) if-section(if段):
      if-group elif-groupsopt else-groupopt endif-line(if组 elif群组可选 else组可选 endif行)

(6.10) if-group(if组):
      # if constant-expression new-line groupopt# if 常量表达式 新行 组可选
      # ifdef identifier new-line groupopt# ifdef 标识符 新行 组可选
      # ifndef identifier new-line groupopt# ifndef 标识符 新行 组可选

(6.10)elif-groups(elif群组):
      elif-group(elif组)
      elif-groups elif-group(elif群组 elif组)

(6.10)elif-group(elif组):
      # elif constant-expression new-line groupopt# elif 常量表达式 新行 组可选

(6.10)else-group(else组):
      # else new-line groupopt# else 新行 组可选

(6.10)endif-line(endif行):
      # endif new-line# endif 新行)

(6.10)control-line(控制行):
      # include pp-tokens new-line# include pp符号 新行)
      # define identifier replacement-list new-line# define 标识符 置换列表 新行)
      # define identifier lparen identifier-listopt ) replacement-list new-line# define 标识符 左圆括号 标识符列表可选 置换列表 新行)
      # define identifier lparen … ) replacement-list new-line# define 标识符 左圆括号 … ) 置换列表 新行)
      # define identifier lparen identifier-list , … ) replacement-list new-line# define 标识符 左圆括号 标识符列表 , … ) 置换列表 新行)
      # undef identifier new-line# undef 标识符 新行)
      # line pp-tokens new-line# line pp符号 新行)
      # error pp-tokensopt new-line# error pp符号可选 新行)
      # pragma pp-tokensopt new-line# pragma pp符号可选 新行)
      # new-line# 新行)

(6.10)text-line(文本行):
      pp-tokensopt new-line(pp符号可选 新行)

(6.10)non-directive(非指令):
      pp-tokens new-line(pp符号 新行)

(6.10)lparen(左圆括号):
      a ( character not immediately preceded by white-space(一个 ( 字符,前面没有空白)

(6.10)replacement-list(置换列表):
      pp-tokensopt(pp符号可选

(6.10)pp-tokens(pp符号):
      preprocessing-token(预处理符号)
      pp-tokens preprocessing-token(pp符号 预处理符号)

(6.10)new-line(新行):
      the new-line character(新行符)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值