gpt4 book ai didi

c - 如何在同一程序中重用具有不同 typedef 的同一段 C 代码?

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:28 25 4
gpt4 key购买 nike

我有一个元素类型为void*的动态数组ADT

// In dyn_array.h
typedef void* element;
void append(array *a, element e);
inline void set(array *a, int i, element e);
...
// dyn_array.c contains the implementation

这在我的程序的许多部分中都有使用。当我向程序添加新功能时,现在我想要一个带有 int 元素而不是 void* 的动态数组。我知道解决方案之一可能是制作 dyn_arrayi.h 和 dyn_arrayi.c,其内容几乎与 dyn_array.h 和 dyn_array.c 相同,除了 typedef 语句和函数名称。但这对我来说似乎不是一个优雅的解决方案,因为我显然在毫无意义地重复自己。

有没有更好的解决方案,这样我就不需要重复自己了?也许编译不同版本的目标代码?你会怎么做?谢谢。

最佳答案

这是 C++ 比 C 更擅长支持的事情。您可以考虑用 C++ 代替吗?

无论如何,在 C 中您可以这样做:首先使用 ARRAY_TYPE 代替 void* 定义 dyn_array_generic.c 等,并添加 中定义的函数后缀code>FUNC_POSTFIX 使用合适的宏添加到每个函数名称,然后在 dyn_array.c 等中执行此操作:

#define ARRAY_TYPE void*
#define FUNC_POSTFIX
#include "dyn_array_generic.c"
#undef FUNC_POSTFIX
#undef ARRAY_TYPE

在 dyn_arrayi.c 等中这样做:

#define ARRAY_TYPE int
#define FUNC_POSTFIX _int
#include "dyn_array_generic.c"
#undef FUNC_POSTFIX
#undef ARRAY_TYPE

#undef 并不是严格需要的,我只是觉得它更清楚。

关于c - 如何在同一程序中重用具有不同 typedef 的同一段 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16790303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com