首页 > 解决方案 > 我可以将变量类型作为 C 语言函数中的参数传递吗?

问题描述

在 C 语言中:我有一个分配额外内存的函数,但我需要发送我需要的内存分配类型,例如(int / char / any struct)作为参数。我认为编写两个做同样事情的函数并不好。

标签: c

解决方案


我需要发送我需要的内存分配类型,例如(int / char / any struct)作为参数。

不,函数参数必须是表达式,在运行时对其进行评估以产生传递的实际值。数据类型不是表达式。

您可以创建一种方法来表示感兴趣的特定数据类型,例如enum,例如:

enum data_type { CHAR, SHORT, INT, LONG, LONGLONG, FLOAT, DOUBLE,  /* ... */ };

然后你可以传递这些值中的适当值。但这仅涵盖您预先提供的特定数据类型。

但是退后一步。你说你想传递数据类型信息来分配内存,但是如果你能传递数据类型,你的分配器实际上会做什么呢?答:确定它的大小。标准库的内存分配函数不关心类型,只关心大小。因此,与首先传递大小相比,构建一个向分配器表达数据类型信息的框架将是一种巴洛克式的浪费。

事实上,您应该考虑您认为通过编写通用分配函数可以获得什么,而不是直接使用malloc()calloc()。确实存在一些正当的理由,但如果你不能说出一个,那么你就是在超越自己。


推荐阅读