1

我只是想知道,如果我有一个函数接受其中包含联合的结构,我怎么知道该联合的内容:

struct command{
  int *input;
  int *output;
  union{
    char **word;
    struct command *subcommand;
  } u;
 };

功能:

void readCommand(command cInput){
    if(cInput.u is char) print the content of array of array of char
    else readCommand(cInput.u); //make a recursive call
}

有什么建议吗?谢谢你

注意:我无法更改 struct 命令的内容。

4

4 回答 4

0

使用联合,您总是需要某种鉴别器来指示哪个特定对象存在于联合中。它可以是一个枚举或一些其他值,它告诉您对象的性质。

例如:

struct command{
  int *input;
  int *output;
  int type; // <-- e.g. this value is the union discriminator; 1 => word, 2 => subcommand
  union{
    char **word;
    struct command *subcommand;
  } u;
 };
于 2013-06-29T21:24:24.187 回答
0

你不能。这就是工会的本质。如果需要,必须将联合嵌入到结构中并在结构中放置类型指示符。

于 2013-06-29T21:00:17.360 回答
0

你不能;您必须假设基础数据是什么,或者可以访问可以告诉您当前基础类型是什么的其他信息。仅提取适当的基础类型才有效。

于 2013-06-29T21:00:23.387 回答
0

如果您从黑盒中接收到这种类型的对象而没有任何关于该对象的信息,那么在不改变struct command结构的情况下就无法做到这一点。

于 2013-06-29T21:00:29.303 回答