I was trying to test my code so far, and when compiling a test run I’m getting an error.
Here is my code:
mips_op.h file
#ifndef MIPS_OP_H
#define MIPS_OP_H
typedef enum {
R, I, J
} op_type;
typedef struct op_instr {
op_type op_t; // instruction type {R, I, J}
int opcode : 6; // instruction opcode - 6-bit integer
// if the instruction type is J
#if op_t == J
int address : 26; // address to jump to - 26-bit integer
#else // if the instruction type is R or I
int rs : 5; // the output - 5-bit integer
int rt : 5; // the first operand - 5-bit integer
#if op_t == R // if instruction type is R
int rd : 5; // the second operand - 5-bit integer
int shamt : 5; // the shift amount field - 5-bit integer
int funct : 6; // the function field
#endif
#if op_t == I // if instruction type is R
int immediate : 16; // the immediate field - 16-bit integer
#endif
#endif
};
#endif
and here is main.c file
#include <stdio.h>
#include "mips_op.h"
int main (void) {
printf("Before instr\n");
op_instr add;
printf("After instr\n");
return 0;
}
and here is the error I’m getting
In file included from main.c:2:0:
mips_op.h:9:10: error: expected ')' before 'op_t'
main.c: In function 'main':
main.c:7:2: error: unknown type name 'op_instr'
What is wrong with my code? Why am I getting this error?
Thanks
EDIT: Fixed the brackets to curly brackets
Replace the “(” in the struct definition to “{“
EDIT: You may are having this problem
“Basically, there’s a complex interaction between ordinary C preprocessor directives, ordinary C language elements, and the inscrutable innards of the Arduino IDE & compiler chain.
As nearly as I can tell, you can wrap #if whatever around simple declarations and most executable code with impunity, but putting anything more elaborate than that, like a simple typedef struct, inside the conditionals causes bizarre problems.
In fact, just typedef can cause problems, particularly if you attempt to use the ensuing tag in a function declaration. Don’t even think about anything along these lines:”