【问题标题】:Accessing the parameters passed to a function with an empty parameter list in C使用 C 中的空参数列表访问传递给函数的参数
【发布时间】:2017-12-02 10:43:50
【问题描述】:

由于具有空参数列表的函数可以在 C 中传递可变数量的参数, 假设我有一个函数定义为:

void foo(){
// I want to access the parameters passed in here
}

我用参数来称呼它,比如说

foo(1,2,3);

我是否可以在我的 foo() 函数中获取那些传递参数的值?我希望类似于 $_ 的东西,Perl 中的默认变量。

编辑:我期待的行为就像这个问题中描述的那样:C function with no parameters behavior

【问题讨论】:

  • $_ 在 Perl 中不是这样工作的,我很确定函数调用具有未定义的行为。
  • 正在寻找可变参数函数?
  • 您链接到的问题包含以下评论:“@John 这意味着编译器不会检查参数的数量(或类型),但您仍然必须使用与参数匹配的参数调用函数在定义中。"
  • @alk 是的,这就是我要找的。​​span>
  • 另一个问题中描述的行为是无限递归(可能是堆栈溢出)。请澄清你在说什么。

标签: c ansi-c kr-c


【解决方案1】:

C99:

6.5.2.2 函数调用

[...]

  1. 如果表示被调用函数的表达式的类型不包含 原型,整数提升对每个参数执行,参数 将类型 float 提升为 double。这些被称为 default 参数 促销如果参数的数量不等于参数的数量,则 行为未定义。

(强调我的。)

因此foo(1,2,3) 具有未定义的行为。甚至不能保证进入函数体,更不用说让你访问额外的参数了。

【讨论】:

    【解决方案2】:

    未定义的行为
    也许你需要Variadic Arguments

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多