替代 C 中的函数重载? [复制]
Posted
技术标签:
【中文标题】替代 C 中的函数重载? [复制]【英文标题】:Alternative to function overloading in C? [duplicate] 【发布时间】:2019-06-21 23:32:47 【问题描述】:既然 C 语言中不允许直接进行函数重载,那么这些函数如何实现呢?
void MotorDriver_Create(float speedAddress,float frequencyAddress, float db_input);
void MotorDriver_Create(float speedAddress, float frequencyAddress, float minDB, float maxDB);
【问题讨论】:
你创建两个函数并调用任何合适的函数。 这将是更简单的解决方案,但我不允许这样做。 @Anku 你不被允许?这是什么意思? 我正在尝试开发独立于硬件的代码,该代码可以初始化参数中变量的值,并根据参数的数量使用上述功能之一。该代码适用于 Java/C++,但由于该代码应该在 C 上运行,因此需要一种方法来执行相同的操作。 @LeedMxextern
关键字确实指定了外部链接,但这也是文件范围声明的默认值,包括 all 函数。只有声明为static
的函数具有内部链接。没有上下文、环境或范围允许 C 语言通过相同的名称访问不同的对象或函数,除了接受的答案中描述的通用选择之外,这实际上不是一回事。
【参考方案1】:
没有办法实现类似于 C++ 中可用的函数重载,因为与 C++ 不同,函数签名不会以允许重载的方式进行修改。您可以做的是使用_Generic
关键字将宏映射到最适合参数类型的函数调用。例如:
#include <math.h>
#include <float.h>
#define sqrt(X) _Generic((X), \
long double: sqrtl, \
default: sqrt, \
float: sqrtf \
)(X)
【讨论】:
那个。是。苏。凉爽的!不知道这个关于C 这是 C11 的一部分。以前没有。 @EugeneSh。确实,c 的标签信息鼓励贡献者使用最新版本 @GovindParmar 当然,这是 c18 AFAIK :) 没有异议,只是对 smac89 评论的评论。 我看到 OP 接受了这个答案,这很好,但我注意到提出的问题是关于基于参数数量的重载。据我所知,通用选择并没有提供解决方案。以上是关于替代 C 中的函数重载? [复制]的主要内容,如果未能解决你的问题,请参考以下文章