首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C多类型函数

C多类型函数
EN

Stack Overflow用户
提问于 2016-01-11 23:28:28
回答 4查看 3.7K关注 0票数 3

我想用C语言编写一些函数,但它们必须对所有数值类型(int、float、double)都可用。什么是好的实践?在void上使用指针(当然还有指向函数的指针)?或者为每种类型编写不同的函数?

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 float func(float a, float b) {
   return a+b;
 }
EN

回答 4

Stack Overflow用户

发布于 2016-01-11 23:42:49

如果您可以使用C11,_Generic可以提供以下帮助:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int ifunc(int a, int b) { return a+b; }
float ffunc(float a, float b) { return a+b; }
double dfunc(double a, double b) { return a+b; }

#define func(x, y) \
   _Generic((x), int: ifunc, float: ffunc, double: dfunc, default: ifunc)(x, y)

int main(void)
{
    {
        int a = 1, b = 2, c;
        c = func(a, b);
        printf("%d\n", c);
    }
    {
        float a = .1f, b = .2f, c;
        c = func(a, b);
        printf("%f\n", c);
    }
    {
        double a = .1, b = .2, c;
        c = func(a, b);
        printf("%f\n", c);
    }
    return 0;
}
票数 5
EN

Stack Overflow用户

发布于 2016-01-11 23:37:19

由于C没有像C++ (编辑:除非您使用具有_Generic的C11 )那样的多分派(函数重载),所以您必须为每种类型的函数命名不同,如funcInt(int a, int b); funcFloat(float a, float b);

使用允许typeof() to kind of fake it的GCC风格的语句表达式宏。

票数 3
EN

Stack Overflow用户

发布于 2016-01-11 23:36:18

在C++中,这可以通过模板或函数重载轻松完成。我在C中知道的唯一方法是为每种类型编写一个不同的函数。

您可以使用一个带有两个void*的函数并对它们进行计算,但这对用户来说是极具误导性的:如果有一种特殊类型,该函数的另一个版本可用,但用户使用的是void*函数,该怎么办?这可能会导致很大的问题,因此不建议这样做。

有关这方面的一个实际示例,请看位于stdlib.h中的标准字符串转换函数atoiatolatof。每个变量类型一个函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34733044

复制
相关文章
函数类型_C语言函数类型
在ECMAScript 中有三种函数类型:函数声明,函数表达式和函数构造器创建的函数。每一种都有自己的特点。
全栈程序员站长
2022/09/20
9980
c++ bool类型函数[通俗易懂]
bool型函数指的是返回值为bool类型的函数,其调用方式和int 型函数没有太大的区别。
全栈程序员站长
2022/07/01
2.9K0
C++之类型转换函数
在平时写代码的时候,最怕的就是那种隐式数据类型转换了,一不小心,软件就bug不断;而显式数据类型(一般是程序自己去强制类型转换,这个是我们能够明显的识别和掌控的)。为此我们这里总结了一副隐式类型转换的图:
用户6280468
2022/03/21
6860
C++之类型转换函数
c++类的类型转换函数
之前学习的,可以将普通类型转换为类类型,需要借助转换构造函数。那么反过来,类类型可以转换为普通类型吗?
用户7886150
2021/02/04
9130
C++转换构造函数与类型转换构造函数
转换构造函数:  转换构造函数的只有一个形参: 1 Student(float s) 2 { 3 score = s; 4 age = 0; 5 }  如果已经在上面定义了构造函数: 1 Student(85); //建立对象c1,由于只有一个参数,调用转换构造函数 如果对“+”进行了重载,那么以下是编译错误的: 1 stu2 = stu1 + 85; //这样编译错误 2 stu2 = stu1 + Student(85); //合法,将85转换为
233333
2018/03/07
1.9K0
c语言 bzero_c语言中函数的类型
  bzero(&tt,sizeof(tt)); // struct initialization to zero
全栈程序员站长
2022/11/04
2.9K0
c语言定义函数和声明函数_C语言中用户定义函数的类型
There can be 4 different types of user-defined functions, they are:
全栈程序员站长
2022/06/28
2.6K0
C语言-指针作为函数形参类型
C语言函数里最常用就是指针传参和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理,并且C语言标准库里也提供了string.h 头文件,里面包含了很多字符串处理函数;这些函数的参数和返回值几乎都是指针类型。这篇文章就介绍如何使用指针作为函数参数、并且使用指针作为函数返回值。
DS小龙哥
2022/01/07
1.7K0
C语言指针做函数参数,指针做函数返回类型
有时候我们可以使用函数的返回值来回传数据,在简单的情况下是可以的,但是如果返回值有其它用途(例如返回函数的执行状态量),或者要回传的数据不止一个,返回值就解决不了了,所以要引用上指针来传递。
C语言中文社区
2022/11/08
2.6K0
C语言指针做函数参数,指针做函数返回类型
【C 语言】数据类型本质 ( sizeof 函数 | 数据类型大小 )
作为参数 , 如果传入变量 , 会计算变量对应的数据类型对应的内存大小 , 如果传入表达式 , 会计算表达式计算结果的数据类型对应的大小 ;
韩曙亮
2023/03/29
9850
【C 语言】数据类型本质 ( sizeof 函数 | 数据类型大小 )
c++11模板:获取函数的参数类型
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/87891028
10km
2019/05/25
4.3K0
【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
函数类型格式 : 圆括号中定义 参数类型列表 , 使用 -> 由参数列表指向返回值类型 , 表示接受 参数类型列表 中的参数 , 返回 返回值类型 的返回值 ;
韩曙亮
2023/03/27
2.8K0
C#篇(三)——函数传参之引用类型和值类型
函数传参之值类型: 简单的值类型传参这里就不演示了,来一个含有引用类型的值类型传参实例(只是将上例中的struct改为了class,这样好做对比):
yaphetsfang
2020/07/30
9630
C#篇(三)——函数传参之引用类型和值类型
函数类型
任何函数值都符合原始类型function,它对函数的形参类型或函数返回值的类型没有任何限制。自定义函数类型值用于对符合函数值的签名设置类型限制。
冬夜先生
2022/01/05
5520
【C++】C++ 语言对 C 语言的加强 ③ ( 类型检查增强 - 所有函数和变量必须有类型 | 新增 bool 类型 - bool 类型简介 )
在 C 语言中 , 函数的返回值类型在定义时可以不写明 , 函数参数如果为空 , 可以任意传入参数 , 也不会报错 ;
韩曙亮
2023/10/15
4010
【C++】C++ 语言对 C 语言的加强 ③ ( 类型检查增强 - 所有函数和变量必须有类型 | 新增 bool 类型 - bool 类型简介 )
C语言解惑:指针、数组、函数和多文件编程
本书的前提是读者已经学过C语言,书中将完整、系统地论述各个部分的知识并结合实用程序和趣味游戏程序,综合讲解函数设计、多文件编程和结构化程序设计的方法。本书既可以作为教师、学生及工程技术人员的参考书,也可以作为常备手册。
用户3157710
2018/10/10
1.5K0
C语言解惑:指针、数组、函数和多文件编程
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ;
韩曙亮
2023/10/15
2040
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ;
韩曙亮
2023/10/15
1890
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
C++模板取函数参数类型和返回值类型的方法
static_assert(is_same_v<decltype(f), int(int, short, float)>);
用户7886150
2021/02/03
4.2K0
【说站】c语言中函数参数类型的探究
函数中的参数个数可以是0,也可以是一个或多个参数。下面我们带着这三种不同的情况,分别在c语言中进行讨论。
很酷的站长
2022/11/24
7720

相似问题

C函数多结果多类型

47

C++中的多类型运算函数

20

是否可以在C# 4.0中创建多类型lambda函数的单个多类型集合?

50

C++多类型赋值

10

多类型变量C#

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文