[英]function definition in BNF C grammar
我讀這 ÇBNF語法。 我有以下問題:
<declarator>
作業是正確的: id(int a, int b)
(在<direct-declarator>
),依此類推,用於函數原型/定義的參數中的數組,等等; <function-definition>
,為什么在<declarator>
后跟{<declaration>}*
? 據我了解,它可以使類型名稱或存儲類有效,后跟一個函數標頭,例如id(int a, int b) int
。 但是我確定它在C語言中無效。我想念什么? 是的,該語法中的<declarator>
是要聲明的對象的名稱,加上其參數或數組大小(以及其類型的指針限定符)。 <declarator>
不包括基本類型(函數的返回類型;數組的元素類型)。
請注意,在<direct-declarator>
中有兩種選擇,它們似乎都與函數有關: <direct-declarator> ( <parameter-type-list> ) <direct-declarator> ( {<identifier>}* )
第一個這些就是我們通常認為的函數聲明,其中參數是類型或具有參數名稱的類型。 第二個只是標識符列表。 (我認為它應該是逗號分隔的標識符列表。)第二種情況是老式的“ K&R”函數定義語法,您以前可能從未見過,閱讀完此答案后應立即忘記,因為-盡管C編譯器仍然接受它-它已被棄用了不僅是幾年,甚至數十年。 所以不要使用它 。 為了歷史上的完整性,它是這樣的: int foo(n, p) int n; char p; { / Body of the function */ }
int foo(n, p) int n; char p; { / Body of the function */ }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.