gpt4 book ai didi

c - BNF C 文法中的函数定义

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:54 25 4
gpt4 key购买 nike

我正在阅读 this C BNF 文法。我有以下问题:

  1. 是正确的 <declarator>解析此语法的作业:id(int a, int b) (在 <direct-declarator> 中)等等到函数原型(prototype)/定义等参数中的数组;
  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 <em>p;
    {
    /</em> Body of the function */
    }

关于c - BNF C 文法中的函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com