【问题标题】:Difference between identifier list and parameter list in function?函数中标识符列表和参数列表的区别?
【发布时间】:2017-02-21 12:49:16
【问题描述】:

对于这个报价:

函数声明器中的标识符列表不属于 该函数的定义应为空。

标识符列表和参数列表有什么区别,有人可以提供此引用的示例。

【问题讨论】:

  • 当您提供标准引号时,指定您正在使用哪个文档的哪个部分会很有用。
  • 是6.7.5.3/3
  • 我想你可以在这里找到答案...stackoverflow.com/questions/18820751/…
  • 这是阅读问题的一半答案。
  • 我的文件真的是 C99 标准的。

标签: c function declaration definition


【解决方案1】:

“标识符列表”仅用于过时的“K&R 风格”功能。今天编写的新代码永远不会使用它。您可以在此处查看更多详细信息:https://stackoverflow.com/a/3092074/4323

是这样的:

void func(identifier-list)
declaration-list
{
    body
}

当他们说它应该是空的时,他们的意思是即使承认古代代码的可能性,你也不允许在没有定义函数的声明中包含这个。例如,这是不允许的:

void func(x) int x;

【讨论】:

  • shall be empty 呢?
  • 是对面的切换它们。
  • @Sabrina 这很清楚不是吗? “应为空”表示括号之间不能有任何内容,因为声明不是定义。所以你不能写void func(x);
  • @M.M 所以引用仅限于旧式。(K&R)
  • 标准是这样写的,因为函数声明的语法规则将func() 视为括号之间有一个空的标识符列表。因此,必须在函数声明中允许标识符列表......但前提是它们为空。
【解决方案2】:

没有标识符定义的标识符列表没有说明函数参数的类型。因此,当函数声明不是函数定义时,为函数声明指定标识符列表是没有意义的。

所以使用了引用引用的这个限制。

这是一个例子

#include <stdio.h>

void f();

int main(void) 
{
    int x = 10;
    f( x );

    return 0;
}

void f( x ) 
int x;
{
    printf( "x = %d\n", x );
}

当使用参数列表时,编译器可以检查函数调用是否将有效参数传递给函数。所以最好总是使用参数列表而不是标识符列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多