是否有可能通過變量類型作爲函數參數的一部分,例如:傳遞變量類型,函數參數
void foo(varType type)
{
// Cast to global static
unsigned char bar;
bar = ((type *)(&static_array))->member;
}
我記得它是與海灣合作委員會的typeof
和使用宏?
是否有可能通過變量類型作爲函數參數的一部分,例如:傳遞變量類型,函數參數
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
的引用。
不要這麼消極有更多的可以做的態度;) –
你可以把所有不同類型的可能枚舉,並使用一個開關,使提領:
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,如果你是(聯合國)幸運。 –