将变量类型作为函数参数传递

是否可以将变量类型作为函数参数的一部分传递,例如:

void foo(varType type) { // Cast to global static unsigned char bar; bar = ((type *)(&static_array))->member; } 

我记得它与GCC的typeof和使用宏有关吗?

你不能为函数做到这一点,因为它需要知道参数的类型(以及函数使用的任何其他符号)来生成工作机器代码。 您可以尝试一个像:

 #define foo(type_t) ({ \ unsigned char bar; \ bar = ((type_t*)(&static_array))->member; \ ... \ }) 

您可以为所有不同类型创建枚举,并使用开关进行解除引用:

 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  #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); // <-- WOOT, check it out! printf("a=%d, b=%d \n", a, b); // a=0, b=3 return 0; } 

鉴于C是一种静态类型语言 ,我不知道如何在一般情况下做到这一点。

编译器需要在编译时知道type *type *是什么,以便能够生成对->member的引用。