【问题标题】:Can a C function have multiple signatures? [duplicate]C 函数可以有多个签名吗? [复制]
【发布时间】:2011-11-28 16:53:55
【问题描述】:

可能重复:
function overloading in C

抱歉,如果这是一个重复,但如果是,我找不到它。

在C语言中,你可以定义多个函数名相同但参数不同的函数吗?我来自 C# 背景。在 C# 中,下面的代码是完全合法的。

//我们的第一个函数

int MyFunction()
{
    //Code here
    return i;
}

int MyFunction(int passAParameter)
{
    // Code using passAParameter
    return i;
}

在我的具体情况下,我想创建一个在参数列表末尾有一个可选参数(即 int)的函数。这个可以吗?

【问题讨论】:

  • 不,sir 函数重载在 C 中是不允许的,但在 C++ 中是允许的。
  • 虽然链接中的类似问题可能对进行某种重载有一些提示,但您可能应该远离它。与 C# 不同,重载在 C 中不是惯用的,创建两个函数 MyFunctionMyFunctionWithParameter 是完全可以接受的
  • 由于已关闭,我无法给您“答案”,但必须将其放在评论中。可选参数的特殊情况可能与宏技巧有关。看看 P99,p99.gforge.inria.fr

标签: c function


【解决方案1】:

没有。 C 不支持重载。

【讨论】:

  • 虽然 C 通常没有重载,但 OP 要求的特殊情况,即默认参数,可以用宏以方便的方式完成。
  • 如果你想看看它在 C++ 中是如何被支持的,请在类 unix 的操作系统上使用nm 工具,你会看到 C++ 中内置到 ELF 中的符号被破坏并添加了它们的类型信息进入符号名称。如果您 extern "C" 围绕相同的符号并再次构建并查看,您会注意到名称没有被破坏以包含参数类型。
【解决方案2】:

没有。在严格的 C 中,您不能进行 重载

但是,鉴于大多数 C 编译器也支持 C++,而且 C++ 确实支持重载,如果您使用的是主流 C/C++ 编译器,则很有可能进行重载。

但它不是严格的标准或可移植到纯 C 环境。

【讨论】:

    【解决方案3】:

    不,您必须为每个函数使用不同的名称(这不适用于 C++,因为它允许您指定可选参数)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2011-02-04
      • 1970-01-01
      • 2012-09-11
      • 2010-12-09
      • 1970-01-01
      相关资源
      最近更新 更多