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

fre*_*nix 25 c gcc

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

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

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

hug*_*omg 33

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

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;
         ...
    }
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*d X 14

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

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


Flo*_*ock 7

呃,当然可以.只需使用这样的宏:

#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); // <-- WOOT, check it out!

  printf("a=%d, b=%d \n", a, b); // a=0, b=3
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 您实际上并不将类型传递给此处的函数,而是在每次使用它时创建新代码。 (3认同)