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 に答える