C erreur escomptés identificateur

J'étais en train de tester mon code jusqu'à présent, et lors de la compilation d'un test, j'obtiens une erreur.

Voici mon code:

mips_op.h fichier

#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

et là est le principal.c fichier

#include <stdio.h>
#include "mips_op.h"

int main (void) {
    printf("Before instr\n");

    op_instr add;

    printf("After instr\n");

    return 0;
}

et voici l'erreur que je reçois

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'

Quel est le problème avec mon code? Pourquoi j'obtiens cette erreur?

Grâce

EDIT: Fixe les crochets pour des accolades

  • Vous semblez être dans l'illusion que vous pouvez utiliser le préprocesseur des conditions afin de définir dynamiquement votre structure au moment de l'exécution ? Envisagez l'utilisation d'une union de ce genre de chose.
  • Oh, d'Accord merci beaucoup Paul
  • Il peut être utile de lire le message d'erreur. Quand vous voyez un ')' prévu, vous pouvez être assuré qu'il n'y est une unclosed '(' là, quelque part. Pourtant, cette partie du code ne devrait pas en avoir n'importe où près de là. Alors, allez le trouver (typedef struct op_instr ( <<<<=====) et le fixer.
  • si je veux utiliser de l'union, alors j'aurais besoin de faire 3 structures, une structure pour la r instructions, j'ai des instructions, et j instructions de droit?
  • oui, exactement.
  • Ok merci