【发布时间】:2014-04-17 18:09:21
【问题描述】:
如果我有一个结构,说
struct mystuff {
int a;
int b;
int c;
}
然后我有一个这些结构的数组,
struct mystuff array[] = {...};
现在说我想将结构数据成员 a 提取到它自己的数组中,
int* get_mystuff_a(struct mystuff *array, int n)
{
int i;
int *a_array;
a_array = malloc(n*sizeof(int));
for(i=0;i<n;i++) {
a_array[i] = array[i].a;
}
return a;
}
现在如果我想对 b 做同样的事情,我必须编写另一个函数,但除了
b_array[i] = array[i].b;
有没有一种方法可以编写一个通用函数并指定我要提取的数据成员作为参数?
我认为宏函数可能有效,但我不知道你会如何编写它
如果您还可以指定数据类型,例如数据成员的 int、float、double 等 - 使其更加通用
【问题讨论】:
-
哈哈 - 我知道使用预处理器可以做到这一点 - 我只是没有实际编写它的能力,我没有太多使用预处理器,当我有时我倾向于得到它错了 - 需要朝着正确的方向推进
-
您可能会使用
offsetof作为通用函数的参数。但在我看来,罗德里戈建议的宏会更安全。 -
使用宏可以实现令人惊奇的效果——我使用 uthash 和 utarray,它们完全在自己的头文件中仅使用宏实现——但肯定很难理解/调试。我认为有一种方法可以让 gcc 在预处理器运行后输出代码,然后您可以逐步完成,但我还没有尝试过