首页 > 解决方案 > 如何将“类型”作为参数传递给 c 中的函数?

问题描述

我想编写通用函数(例如,获取数组类型的函数void**并对这个数组做一些事情)这样这个函数将获取元素的类型(在示例中,它将是任何元素的类型数组)作为参数。

我可以用c做吗?


例如:

我想编写一个函数来获取数组(类型为void**)并以某种随机方式初始化该数组。

“以某种随机方式”我的意思是,例如一个作为参数的函数:数组(在类型中void**),数组中任何元素的类型,索引(在类型中int)并初始化这个单元格。

标签: carraystypesgeneric-programming

解决方案


这只有在您有标准 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

推荐阅读