Тип массива имеет неполный тип элемента «инструкция структуры»

#c #structure

Вопрос:

Как сделать эту инструкцию структуры видимой для состояния процессора структуры? Например, если я сначала введу структуру состояния процессора, это не сработает, потому что некоторые другие аргументы не будут видны инструкции структуры, но если я снова изменю ее, у меня возникнет проблема.

 struct  cpu_state
{
    int nextinstructionlinenumber;
    char filename[200];
    char RLO;

    struct instruction instructionlist[INSTRUCTIONLIST_SIZE];
    int instructionlistnumber;
    struct variable variablelist[INSTRUCTIONLIST_SIZE];
    int variablelistnumber;

};
struct cpu_state CPU; 


struct instruction{
    char name[LINE_CHAR_NUM];
    void(*function)(struct cpu_state* pstate, struct line* pline);
};
 

Комментарии:

1. для struct instruction instructionlist[INSTRUCTIONLIST_SIZE]; успешного выполнения компилятор должен, по крайней мере , знать размер структуры, поэтому на данном этапе он должен знать ее определение.

Ответ №1:

Вы можете создавать неполные объявления структуры при условии, что они используются только для указателей. Например, будет работать следующий порядок. Обратите внимание, что я создал фиктивное определение struct variable , так как оно отсутствовало в сообщении. Вы можете заменить его чем угодно:

 struct variable {
    int     dummy_val;
};

struct cpu_state;
struct line;

struct instruction{
    char name[LINE_CHAR_NUM];
    void(*function)(struct cpu_state* pstate, struct line* pline);
};

struct  cpu_state
{
    int nextinstructionlinenumber;
    char filename[200];
    char RLO;

    struct instruction instructionlist[INSTRUCTIONLIST_SIZE];
    int instructionlistnumber;
    struct variable variablelist[INSTRUCTIONLIST_SIZE];
    int variablelistnumber;

};

struct cpu_state CPU;