Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 传递不同结构的函数参数_C_Function_Struct_Parameters - Fatal编程技术网

C 传递不同结构的函数参数

C 传递不同结构的函数参数,c,function,struct,parameters,C,Function,Struct,Parameters,可以写一个函数吗 可以从同一参数接收不同类型的结构(可能是void*?),以及 检测功能中接收到的结构类型 也就是说,当我调用这个函数时,我向它发送一个特定的结构,当我再次调用它时,我发送一个不同类型的结构 这在C语言中是可能的吗 提前感谢。实现这一点的老式方法是使用一些包含枚举和空指针的通用结构,如: typedef enum { FOO_TYPE, BAR_TYPE } type_t; typedef struct { type_t type; void* data; }

可以写一个函数吗

  • 可以从同一参数接收不同类型的结构(可能是
    void*
    ?),以及
  • 检测功能中接收到的结构类型
  • 也就是说,当我调用这个函数时,我向它发送一个特定的结构,当我再次调用它时,我发送一个不同类型的结构

    这在C语言中是可能的吗


    提前感谢。

    实现这一点的老式方法是使用一些包含枚举和空指针的通用结构,如:

    typedef enum
    {
      FOO_TYPE,
      BAR_TYPE
    } type_t;
    
    typedef struct {
      type_t type;
      void*  data;
    } foo_t
    
    然后检查枚举
    类型
    ,并将数据指针强制转换为适当的类型

    在现代标准C中,您也可以创建类型通用、类型安全的宏,如下所示:

    void func_int   (int x);
    void func_float (float x);
    
    #define func(x) _Generic((x), case int: func_int, case float: func_float) (x)
    
    ...
    
    int i;
    float f;
    func(i);
    func(f);
    

    简短回答:不。长回答:有变通办法。