C错误预期标识符

时间:2012-11-15 22:42:38

标签: c compiler-errors

到目前为止,我试图测试我的代码,在编译测试运行时,我遇到了错误。

这是我的代码:

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'

我的代码出了什么问题?为什么我会收到此错误?

由于

编辑:将括号固定为大括号

3 个答案:

答案 0 :(得分:2)

我认为你使用(而不是{围绕你的结构。或者我错了?

答案 1 :(得分:2)

将结构定义中的“(”)替换为“{”

typedef struct op_instr
**{**
   ...
**}**

编辑:您可能正在使用此problem

“基本上,普通的C预处理器指令,普通的C语言元素和Arduino IDE&amp;编译器链中不可思议的内部之间存在复杂的交互。

就我所知,你可以将#if包装在简单的声明和大多数可执行代码中而不受惩罚,但是在条件句中放入比这更复杂的东西,比如简单的typedef结构,会导致奇怪的问题。

实际上,只有typedef会导致问题,特别是如果您尝试在函数声明中使用随后的标记。甚至不要考虑这些方面的任何事情:“

答案 2 :(得分:0)

您的移民问题是您使用()而不是{}作为结构范围。

正如Paul R所说,你似乎还有其他一些问题。