传递变量类型,函数参数
问题描述:
是否有可能通过变量类型作为函数参数的一部分,例如:传递变量类型,函数参数
void foo(varType type)
{
// Cast to global static
unsigned char bar;
bar = ((type *)(&static_array))->member;
}
我记得它是与海湾合作委员会的typeof
和使用宏?
答
你不能这样做,对于一个功能,因为那时它需要知道的类型参数(以及函数使用的任何其他符号)来生成工作机器代码。你可以尝试像宏:
#define foo(type_t) ({ \
unsigned char bar; \
bar = ((type_t*)(&static_array))->member; \
... \
})
答
因为C是statically typed language,所以在一般情况下,我看不出如何做到这一点。
编译器需要在编译时知道type *
的类型是为了能够生成对->member
的引用。
+0
不要这么消极有更多的可以做的态度;) –
答
你可以把所有不同类型的可能枚举,并使用一个开关,使提领:
typedef enum {
CHAR,
INT,
FLOAT,
DOUBLE
} TYPE;
void foo(TYPE t, void* x){
switch(t){
case CHAR:
(char*)x;
break;
case INT:
(int*)x;
break;
...
}
}
答
不是一个函数,但是你可以使用宏象这样:
#include <stdio.h>
#define swap(type, foo, bar) ({type tmp; tmp=foo; foo=bar; bar=tmp;})
int main() {
int a=3, b=0;
printf("a=%d, b=%d \n", a, b); // a=3, b=0
swap(int, a, b); // <-- action happens here
printf("a=%d, b=%d \n", a, b); // a=0, b=3
return 0;
}
不能在标准C.也许在GCC,如果你是(联合国)幸运。 –