c - 如何将“类型”作为参数传递给 c 中的函数?
问题描述
我想编写通用函数(例如,获取数组类型的函数void**
并对这个数组做一些事情)这样这个函数将获取元素的类型(在示例中,它将是任何元素的类型数组)作为参数。
我可以用c做吗?
例如:
我想编写一个函数来获取数组(类型为void**
)并以某种随机方式初始化该数组。
“以某种随机方式”我的意思是,例如一个作为参数的函数:数组(在类型中void**
),数组中任何元素的类型,索引(在类型中int
)并初始化这个单元格。
解决方案
这只有在您有标准 C 编译器时才有可能,在这种情况下,您可以_Generic
为此目的使用关键字。您必须为每种支持的类型编写不同的函数。
#include <stdio.h>
#define func(x) _Generic((x), int: func_int, char: func_char)(x);
void func_int (int x)
{
printf("%s\t%d\n", __func__, x);
}
void func_char (char x)
{
printf("%s\t%c\n", __func__, x);
}
int main(void)
{
int i = 5;
char c = 'A';
func(i);
func(c);
}
输出:
func_int 5
func_char A
推荐阅读
- c++ - 一个数的最大除数和质因数的关系
- amazon-web-services - 从 Pyspark 调用 AWS S3 存储桶时出错。AWS 错误代码:空,AWS 错误消息:错误请求
- reactjs - WebpackError:TypeError:无法解构属性
- asp.net-core - 只为自定义日志写入日志
- static-analysis - 使用 clang-tidy 时忽略某些文件
- android - android Retrofit中的动态JSON解析?
- linux - 我有多个不同版本的文件名。如何从每个文件名中选择最高编号的版本
- reactjs - goBack() 按钮不起作用。HashRouter 反应
- plot - 单个图上的多个 Y 轴
- .net - 触摸屏上 Windows 窗体应用程序的本机控件?