2017-09-05 85 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