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

それはいけません。それが組合の性質です。必要に応じて、共用体を構造体に埋め込み、構造体に型インジケーターを配置する必要があります。

于 2013-06-29T21:00:17.360 に答える
0

できません; 基になるデータが何であるかを想定するか、現在の基になる型が何であるかを示すことができる他の情報にアクセスする必要があります。適切な基になる型を抽出することのみが有効です。

于 2013-06-29T21:00:23.387 に答える
0

このオブジェクトに関する情報なしでブラックボックスからこのタイプのオブジェクトを受け取った場合、struct command構造を変更せずにそれを行う方法はありません。

于 2013-06-29T21:00:29.303 に答える
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 に答える