簡體   English   中英

BNF C語法中的函數定義

[英]function definition in BNF C grammar

我讀 ÇBNF語法。 我有以下問題:

  1. 解析該語法的<declarator>作業是正確的: id(int a, int b) (在<direct-declarator> ),依此類推,用於函數原型/定義的參數中的數組,等等;
  2. <function-definition> ,為什么在<declarator>后跟{<declaration>}* 據我了解,它可以使類型名稱或存儲類有效,后跟一個函數標頭,例如id(int a, int b) int 但是我確定它在C語言中無效。我想念什么?
  1. 是的,該語法中的<declarator>是要聲明的對象的名稱,加上其參數或數組大小(以及其類型的指針限定符)。 <declarator>不包括基本類型(函數的返回類型;數組的元素類型)。

  2. 請注意,在<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM