2017-09-05 92 views
-2

man operator macOS 10.12显示etc.,它是什么,一个联机错误?运算符优先级man page中的`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 
+1

et。这意味着所有没有列出..它包括其他像/ = –

+1

它不是一个运算符,它的意思是“所有其他赋值运算符,如'* =','/ ='等。 –

+3

对于“* etc *”,请参阅此处:https://en.wikipedia.org/wiki/Et_cetera – alk

回答

3

的一个you mentioned没有列出所有赋值运算符,所以它使用etc.(etc == et cetera),表明这不是一个详尽的清单。这是不是bugetc.都不是一个运算符/关键字C(想到提及,FWIW)。

other version列出了所有这些。

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

完整列表位于第6.5.16节,C11

+1

您不会说拉丁语吗? ;-) – alk

+1

@alk我也不会写。 :) –

2

etc.代表拉丁等等,字面意思是“剩下的”。这里表示“作业操作员”的全家:*=,/=%=等等。

1

虽然你已经有了一个答案,你的立即问题 - 只是意味着,他们没有列出每一个赋值运算符在这里 - 你很可能从另外一条信息中获益:

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

N1570(最新的C11草案),§6.5。1:

基本表达式
            标识符
            恒定
            字串文本
            表达
            通用选择

这等同于以下BNF:

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

来自全国各地§6.5蔓延全语法,它可以推导出一个“运算符优先级”,但有与条件运算符的catch?:):它不允许在冒号右侧的赋值表达式,因此虽然它通常以比赋值更高的优先级列出,但您必须将赋值放在隐含点中才能使其成为主expre ssion(请参阅上面的语法片段)。这里有一个nice explanation on cppreference.com