C 函数可以有多个签名吗? [复制]

Posted

技术标签:

【中文标题】C 函数可以有多个签名吗? [复制]【英文标题】:Can a C function have multiple signatures? [duplicate] 【发布时间】: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++ 中是允许的。 这叫做函数重载。看这里:***.com/questions/479207/function-overloading-in-c 虽然链接中的类似问题可能对进行某种重载有一些提示,但您可能应该远离它。与 C# 不同,重载在 C 中不是惯用的,创建两个函数 MyFunctionMyFunctionWithParameter 是完全可以接受的 由于已关闭,我无法给您“答案”,但必须将其放在评论中。可选参数的特殊情况可能与宏技巧有关。看看 P99,p99.gforge.inria.fr 【参考方案1】:

没有。 C 不支持重载。

【讨论】:

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

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于C 函数可以有多个签名吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥具有相同名称但不同签名的多个继承函数不会被视为重载函数?

我可以验证给定的函数类型签名是不是具有潜在的实现吗?

函数签名中变量名前的 * 和 ** 是啥意思? [复制]

ios企业证书导出的P12和对应的描述文件,可以签名ipa吗?

Python需要disconnect信号吗

为 Erlang 提取 C 函数签名