有什么办法可以保留函数变量的返回类型?

时间:2019-11-14 10:50:29

标签: c function struct return-type

我想定义一个函数,该函数返回一个带有变量类型的多个值的struct或一个取决于参数的单个int *,一个用户通过命令行。
I知道,我只是可以总是返回一个struct并从struct中检索与用户输入数据相关的特定值,但是我想知道是否有可能声明一个函数将返回两个A或B。

3 个答案:

答案 0 :(得分:4)

否,必须在编译时确定并确定函数的返回类型,不能在运行时(即根据用户输入)对其进行更改。

但是,您可以使用函数指针数组来根据用户输入来调用不同的函数。

答案 1 :(得分:3)

最接近的方法可能是返回union的结构体以及其他类型信息。

typedef struct {
   MyType type;
   int    alpha;
   float  beta;
   char * gamma;
} A;

typedef struct {
   MyType type;
   int *  data;
} B;

typedef union {
  MyType type;
  A a;
  B b;
} Returnable;

// Returnable func (void);

但是,您需要在函数调用之前检查args或之后的type字段。在后一种情况下,您会丢失编译时类型检查和发明运行时类型检查,这很容易出错。


正如@EricPostpischil在评论中所建议的,另一种方法:

typedef struct {
  int foo;
} A;

typedef struct {
  char bar;
} B;

typedef struct {
  MyType data_type;

  union {
    A a;
    B b;
  } data;
} Returnable2;

答案 2 :(得分:0)

在C语言中实现某种政治同化最好是IMO

    <servlet>
        <servlet-name>Home</servlet-name>
        <jsp-file>/index.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>Home</servlet-name>
        <url-pattern>/home</url-pattern>
    </servlet-mapping>

https://godbolt.org/z/Ww3Qm5