在程式設計領域,理解控制運算子優先順序和結合性的規則至關重要。雖然許多程式設計教科書提供了展示運算子優先順序和結合性的圖表,但根本問題仍然存在:誰定義了這些規則?
與普遍看法相反,ANSI C11 標準沒有明確定義運算子優先權和結合性。相反,這些概念嵌入到語言本身的語法中。例如,C 中加法 ( ) 和減法 (-) 的語法產生規則表示乘法表達式是加法表達式的子規則。這確定了這些運算符之間的優先順序。
關聯性決定如何將相同運算符的多次使用進行分組。例如,加法運算子是從左到右關聯的,這意味著像「x y z」這樣的表達式將被分組為「(x y) z」。
區分關聯性和計算順序非常重要。雖然這些概念相關,但它們是不同的。關聯性決定分組,而求值順序與表達式求值的順序有關。
傳回函數呼叫運算子的範例,從左到右關聯性意味著「f()()()」將被分組為「( f())()」。此分組規則不會影響函數求值的順序,函數求值仍然是無序的。但是,必須在應用運算子之前對操作數進行求值。
歷史上,序列點用於定義 C 和 C 中的求值順序。然而,該術語後來改為“先前測序”。這個概念意味著一個表達式的求值必須先於另一個表達式的求值。
總之,雖然運算子優先順序和結合性表在程式設計教科書中很常見,但這些規則最終源自於語言的語法。了解語法使程式設計師能夠準確地解釋表達式並確定其求值順序。
以上是誰定義了 C 中的運算子優先級和結合性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!