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 中不是惯用的,创建两个函数MyFunction
和 MyFunctionWithParameter
是完全可以接受的
由于已关闭,我无法给您“答案”,但必须将其放在评论中。可选参数的特殊情况可能与宏技巧有关。看看 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 函数可以有多个签名吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥具有相同名称但不同签名的多个继承函数不会被视为重载函数?