Yo estaba tratando de poner a prueba mi código hasta el momento, y cuando se compila la ejecución de una prueba que estoy recibiendo un error.

Aquí está mi código:

mips_op.h archivo

#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

y aquí es lo principal.c archivo

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

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

    op_instr add;

    printf("After instr\n");

    return 0;
}

y aquí está el error, estoy consiguiendo

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'

Lo que está mal con mi código? ¿Por qué estoy recibiendo este error?

Gracias

EDICIÓN: Fija los soportes para las llaves,

  • Usted parece estar bajo la ilusión de que puede utilizar condicionales del preprocesador para definir dinámicamente su estructura en tiempo de ejecución ? Considere el uso de un sindicato para este tipo de cosas.
  • Ah, Bueno muchas gracias Pablo
  • Puede ser beneficioso para leer el mensaje de error. Cada vez que vea a un ‘)’ espera que usted puede estar seguro de que es un mal cerradas ‘(‘ ahí afuera en algún lugar. Sin embargo, esa parte del código no debería tener uno en cualquier lugar cerca de allí. Así que ir a buscar (typedef struct op_instr ( <<<<=====) y solucionarlo.
  • si quiero usar de la unión, entonces yo tendría que hacer 3 structs en ella, una estructura de r instrucciones, me las instrucciones, y j instrucciones de derecho?
  • sí, exactamente.
  • Bien gracias

3 Comentarios

  1. 2

    Reemplazar el «(» en la estructura de la definición de «{«

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

    EDITAR: puede Que este problema

    «Básicamente, hay una compleja interacción entre la C directivas de preprocesador, ordinario C elementos del lenguaje, y la inescrutable entrañas de la Arduino IDE & compilador de la cadena.

    Lo más que puedo decir, puede envolver #si lo que alrededor de simples declaraciones y la mayoría de código ejecutable con la impunidad, pero poniendo algo más elaborado que eso, como un simple typedef struct, dentro de los condicionales causas extrañas problemas.

    De hecho, sólo typedef puede causar problemas, especialmente si intenta utilizar el consiguiente etiqueta en una declaración de función. No pienses en nada a lo largo de estas líneas:»

    • Yeh no lo note. Gracias
  2. 2

    Creo que uso ( en lugar de { aound su estructura. o estoy equivocado ?

    • Que eso es un problema, pero sólo una pequeña parte de todo el problema.
  3. 0

    Su immidiate problema es que usted está utilizando () en lugar de {} por su estructura alcance.

    Como Pablo R dice que parecen tener algunas otras cuestiones.

Dejar respuesta

Please enter your comment!
Please enter your name here