2

我正在编写一些代码,当我尝试测试我的代码时,我得到了一个错误。

这是我的代码:

#include <stdio.h>

enum { add = 0, addu, sub, subu } mips_opcode;
typedef enum mips_opcode mips_opcode_t;

typedef unsigned char byte; // 8-bit int

struct mips {
    char *name;
    byte opcode;
};
typedef struct mips mips_t;

void init (mips_t *out, char *name_tmp, mips_opcode_t opcode_tmp) {
    out->name = name_tmp;
    out->opcode = (byte)opcode_tmp;
}

int main (void) {
    pritnf("no error i assume\n");

    return 0;
}

命令行中的错误是:

main.c:14:55: error: parameter 3 ('opcode_tmp') has incomplete type

我不能使用枚举作为参数还是我在这里做错了什么?

4

2 回答 2

7

这条线是罪魁祸首:

enum { add = 0, addu, sub, subu } mips_opcode;

您正在声明一个名为 的变量mips_opcode,它是一个匿名enum类型。

它应该是:

enum mips_opcode { add = 0, addu, sub, subu };

枚举列表的名称紧跟在单词之后enum

于 2012-11-16T23:26:48.880 回答
6

它需要是这样的:

enum mips_opcode { add = 0, addu, sub, subu }; // type name is "enum mips_opcode"
typedef enum mips_opcode mips_opcode_t;        // type alias

甚至:

typedef enum { add = 0, addu, sub, subu } mips_opcode_t; // alias of anon. type

不要混淆类型名称和变量!

(顺便说一句,Posix_t为类型保留后缀,我相信......)

于 2012-11-16T23:26:29.183 回答