参数在C中的类型不完整

参数在C中的类型不完整,c,enums,compiler-errors,incomplete-type,C,Enums,Compiler Errors,Incomplete Type,我正在写一些代码,当我尝试测试我的代码到现在为止,我得到一个错误 这是我的密码: #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; }; typ

我正在写一些代码,当我尝试测试我的代码到现在为止,我得到一个错误

这是我的密码:

#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;
}

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

它需要如下:

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为类型保留后缀,我相信…

它应该是这样的:

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为类型保留后缀,我相信…

这一行是罪魁祸首:

enum { add = 0, addu, sub, subu } mips_opcode;
您正在声明一个名为mips_操作码的匿名枚举类型的变量

应改为:

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

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

这一行是罪魁祸首:

enum { add = 0, addu, sub, subu } mips_opcode;
您正在声明一个名为mips_操作码的匿名枚举类型的变量

应改为:

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

<枚举列表的名称正好在EnUM的后面。< /P>我很惊讶它没有阻塞,它应该给你一个错误,因为MiSsPopCo码是一个变量,不是一个类型。我认为PRITNFNO错误是这里的实际笑话…看来你混淆了C和C++。在C中,结构定义不是TyEDEFF。@ WielpLase:在C++中,结构定义也不是Type。Kerrek的注释扩展,请参见。在几乎所有的情况下,StultMIPS都相当于MC++中的MIPS,除非您有名字隐藏,这通常是很糟糕的做法。我很惊讶它在没有阻塞的情况下已经走了很远。它应该给您在线上的TyWebug Enm MIPsII操作码MIPSSOPCODEDET中一个错误,因为MIPSX操作码是一个变量,不是一种类型。我认为PRITNFNO错误是这里的实际笑话…看来你混淆了C和C++。在C中,结构定义不是TyEDEFF。@ WielpLase:在C++中,结构定义也不是Type。Kerrek的注释扩展,请参见。在几乎所有的情况下,StultMIPS都相当于C++中的MIPS,除非你有名字隐藏,这通常是很糟糕的做法。非常感谢它的工作,我会确保下次在变量名和类型之间更好地区分,POSIX将所有的符号保留在任何头文件中。请参阅中的图表。我遇到了相同的错误,这是一个我没有注意到的小错误。请确保即使在尝试了上述内容之后,如果您看到错误,也要检查拼写两次。非常有效,我将确保下次更好地区分变量名和类型EP,POSIX在任何头文件中保留以_t结尾的所有符号,请参见中的图表。我遇到了相同的错误,这是一个我无法注意到的小错误。即使尝试了上述操作,如果您看到错误,请确保检查拼写两次