到目前为止,我试图测试我的代码,在编译测试运行时,我遇到了错误。
这是我的代码:
mips_op.h文件
#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
这是main.c文件
#include <stdio.h>
#include "mips_op.h"
int main (void) {
printf("Before instr\n");
op_instr add;
printf("After instr\n");
return 0;
}
这是我得到的错误
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'
我的代码出了什么问题?为什么我会收到此错误?
由于
编辑:将括号固定为大括号
答案 0 :(得分:2)
我认为你使用(而不是{围绕你的结构。或者我错了?
答案 1 :(得分:2)
将结构定义中的“(”)替换为“{”
typedef struct op_instr
**{**
...
**}**
编辑:您可能正在使用此problem
“基本上,普通的C预处理器指令,普通的C语言元素和Arduino IDE&amp;编译器链中不可思议的内部之间存在复杂的交互。
就我所知,你可以将#if包装在简单的声明和大多数可执行代码中而不受惩罚,但是在条件句中放入比这更复杂的东西,比如简单的typedef结构,会导致奇怪的问题。
实际上,只有typedef会导致问题,特别是如果您尝试在函数声明中使用随后的标记。甚至不要考虑这些方面的任何事情:“
答案 2 :(得分:0)
您的移民问题是您使用()而不是{}作为结构范围。
正如Paul R所说,你似乎还有其他一些问题。