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