【问题标题】:what is that `etc` in operator precedence man page?运算符优先级手册页中的“etc”是什么?
【发布时间】:2017-09-05 06:58:28
【问题描述】:

macOS 10.12 上的man operator 显示etc.,这是什么,一个手册页错误?

OPERATOR(7)          BSD Miscellaneous Information Manual          OPERATOR(7)

NAME
     operator -- C operator precedence and order of evaluation

DESCRIPTION
           Operator                        Associativity
           --------                        -------------
           () [] -> .                      left to right
           ! ~ ++ -- - (type) * & sizeof   right to left
           * / %                           left to right
           + -                             left to right
           << >>                           left to right
           < <= > >=                       left to right
           == !=                           left to right
           &                               left to right
           ^                               left to right
           |                               left to right
           &&                              left to right
           ||                              left to right
           ?:                              right to left
           = += -= etc.                    right to left
           ,                               left to right

FILES
     /usr/share/misc/operator

BSD                              June 9, 1993                              BSD

【问题讨论】:

  • 等。等等......这意味着所有都没有列出......它包括其他人,如 /=
  • 它不是运算符,它表示“所有其他赋值运算符,例如*=/= 等”。
  • 对于“”请看这里:en.wikipedia.org/wiki/Et_cetera

标签: c operators


【解决方案1】:

you mentioned 没有列出所有 赋值运算符,因此它使用etc. (etc == et cetera) 表示这不是一个详尽的列表。这不是错误etc. 也不是 C 中的运算符/关键字(想一提,FWIW)。

other version 列出了所有这些。

   = += -= *= /= %= <<= >>= &= ^= |=

完整列表见第 6.5.16 章,C11

【讨论】:

  • 你不会说拉丁语,是吗? ;-)
  • @alk 我也不写。 :)
【解决方案2】:

etc. 代表拉丁文et cetera,字面意思是“和其余的”。这里表示整个“赋值运算符”家族:*=/=%=,等等。

【讨论】:

    【解决方案3】:

    虽然您已经对您的立即问题有了答案——等等。只是意味着他们没有在这里列出每个赋值运算符——你可能会从中受益附加信息:

    严格来说,C 中没有运算符优先级。这意味着C 标准没有指定一个。相反,它为表达式指定了一个 grammar,其符号有点类似于 BNF(它使用单冒号而不是 ::=,斜体而不是尖括号,粗体文本而不是双引号等。 )。例如,它看起来像这样:

    N1570(最新 C11 草案),§6.5.1:

    主表达式 :
    标识符
    常数
    字符串字面量
    ( 表达式 )
    通用选择

    这相当于下面的 BNF:

    <primary-expression> ::= <identifier> | <constant> | <string-literal>
                           | "(" <expression> ")" | <generic-selection>
    

    §6.5 的完整语法中,可以推断出“运算符优先级”,但条件运算符有一个问题> (?:):它不允许在冒号右侧使用 赋值表达式,因此虽然它通常以比赋值更高的优先级列出,但您必须将赋值放入括号使其成为主表达式(参见上面的语法sn-p)。有一个 nice explanation on cppreference.com 关于这个。

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 2011-10-25
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      相关资源
      最近更新 更多