【问题标题】:How to pass "dummy" argument to a function in C?如何将“虚拟”参数传递给 C 中的函数?
【发布时间】:2021-01-08 14:06:00
【问题描述】:

出于问题的目的,我没有报告所有代码,而只是报告了重要的细节。 我有这个功能:

void foo(/* SOME OTHER ARGS */ int* len);

这个函数(我不能编辑也不想编辑,因为在其他情况下我需要len)创建一个文件并相应地修改len 参数。在某些情况下我根本不需要len,因此我的问题是:有没有办法传递一个硬编码的虚拟参数而不为此目的声明一个虚拟变量?

【问题讨论】:

  • 如果foo 允许,你可以只传递NULL。如果foo 不允许,则需要一个有效地址。
  • 为什么你不能声明一个虚拟参数?名为“dummy”的变量是自记录代码的完美示例。通常编写函数以接受 NULL 作为可选参数。
  • 是否允许修改函数实现(不是函数prototype)?

标签: c arguments parameter-passing


【解决方案1】:

复合文字的元素是可修改的,因此如果函数需要有效地址,您可以传递其地址。

foo(/* SOME OTHER ARGS */, (int[]){0});

请注意,表达式中的大多数数组都被转换为其第一个元素的地址。

更多信息:c99 - Why are compound literals in C modifiable - Stack Overflow

【讨论】:

    【解决方案2】:

    如果您不打算使用len,而foo() 准备处理通过len 传递的空值,则可以调用类似的函数

    foo (validparams, NULL);
    

    【讨论】:

    • 也许吧。但是如果foo 需要地址,这可能会导致运行时错误。
    • @WilliamPursell 刚刚更新了那部分。此外,如果foo() 要求len 是有效地址,那么很难看出它会被使用。
    猜你喜欢
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多