【问题标题】:A variable declaration following an argument list [duplicate]参数列表后面的变量声明[重复]
【发布时间】:2014-06-27 04:54:49
【问题描述】:

阅读glibc,在string/strerror.c看到了这段代码:

char *
strerror (errnum)
     int errnum;
{
  char *ret = __strerror_r (errnum, NULL, 0);
  int saved_errno;

  if (__glibc_likely (ret != NULL))
    return ret;
  saved_errno = errno;
  if (buf == NULL)
    buf = malloc (1024);
  __set_errno (saved_errno);
  if (buf == NULL)
    return _("Unknown error");
  return __strerror_r (errnum, buf, 1024);
}

请注意在参数列表后面有一个int errnum。这是一个有效的语法吗?它在做什么?

【问题讨论】:

    标签: c glibc


    【解决方案1】:

    这是老式的做事方式,K&R,pre-ANSI。

    一旦引入了函数原型,这种做事方式就被淘汰了。

    实际上没有过时,因为即使在 C11 中它仍然有效(根据 6.9.1 Function definitions /13),但很少有人再使用它。

    指定功能块的参数类型,类似:

    char *strerror (int errnum)
    

    【讨论】:

    • 在 K&R 下,所有参数都是声明 strerror (errnum) 中的整数,然后按照我的理解在下一行定义类型。
    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2019-05-09
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    相关资源
    最近更新 更多