Проблема, включающая внешне объявленное перечисление - код C - PullRequest
0 голосов
/ 18 ноября 2018

Обновление: проблема решена.Вот код, который правильно компилируется.

---instruction.h---
#ifndef INSTRUCTION_H
#define INSTRUCTION_H

typedef enum OPCODE {ADD = 0x20,ADDI = 0x8,SUB = 0x22,MULT = 0x18,BEQ = 0x4,LW = 0x23,SW = 0x2B} opcode;
/*opcode is OPCODEs alias*/
typedef struct INSTRUCTION {
    opcode op;
    int rs;
    int rt;
    int rd;
    int Imm;
} inst;
/*inst is INSTRUCTIONs alias*/
#endif // INSTRUCTION_H

---parser.c---
#include <stdio.h>
#include "instruction.h"
void parser(char *instruction)
{
    /*Parse character string into instruction components*/
    inst set1 = {LW,0,1,2,0};
    printf("parsing");
};

int main()
{
    char *instruction;
    instruction = NULL;
    parser(instruction);
};
/*pass in pointer for instruction being passed in*/
/*pointing to address of instruction being passed in*/
/*Parser return type is struct inst*/

Не получается, чтобы мой тип перечисления "код операции" был распознан в моем главном файле c.Я включил заголовочный файл.Я довольно новичок в C, поэтому уже давно не разбираюсь в этом вопросе и хотел узнать, знает ли кто-нибудь, почему я получаю сообщения об ошибках ниже.Я думаю, что ссылка на файл заголовка не работает должным образом.Любая помощь очень ценится. enter image description here

---instruction.h----

#ifndef INSTRUCTION_H
#define INSTRUCTION_H

typedef enum {add = 32,addi = 8,sub = 34,mult = 24,beq = 4,lw = 35,sw = 43}opcode;
extern opcode oper;
typedef struct {
    opcode op;
    int rs;
    int rt;
    int rd;
    int Imm;
}inst;
#endif // INSTRUCTION_H

---Parser.c---

#include <stdio.h>
#include "instruction.h"
void parser(char *inst)
{
    /*Parse character string into instruction components*/
    struct inst{lw,0,1,2,0};

};

int main()
{
    char *instruction;
    instruction = NULL;
    parser(instruction);
};

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Это недопустимое определение переменной:

struct inst{lw,0,1,2,0};

Здесь не определено struct inst, только inst, нет имени переменной, и вам нужно =, чтобы использовать инициализатор.Чтобы создать переменную этого типа и инициализировать ее, вам необходимо:

inst myinst = {lw,0,1,2,0};

Кроме того, ваша функция имеет параметр с именем inst, который маскирует тип inst.Вам нужно дать ему другое имя:

void parser(char *instruction)
0 голосов
/ 18 ноября 2018
struct inst{lw,0,1,2,0};

Похоже, это должно быть объявление переменной, но я не вижу имени для переменной. Попробуйте:

struct inst name_of_the_variable = {lw,0,1,2,0};

В качестве примечания, значения enum являются глобальными константами, поэтому, вероятно, не стоит давать им такие имена, как lw, которые можно спутать с переменными. Стандартной практикой будет использование заглавных букв в именах и присвоение им префикса, скажем, OPCODE_ADD, OPCODE_LW и т. Д.

...