• Domingo 22 de Diciembre de 2024, 18:13

Autor Tema:  Error Al Compilar En Un Union  (Leído 1590 veces)

tulum

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Error Al Compilar En Un Union
« en: Miércoles 4 de Agosto de 2004, 17:13 »
0
Hola a todos,

Casi no conozco C pero me dejaron unos programas que tengo que hacer que compilen pero me manda varios errores, uno de ellos y que ojala y me puedan ayudar es este que tengo en un UNION:

Primero lo tenia asi: union REGS v1, v2;

pero alguien me dijo que estaba mal y que era de esta forma:
union {
REGS v1;
REGS v2;
} ;

lo cambie pero me manda estos errores en el UNION(aparte de varios errores mas):

C:/Dev-Cpp/RNO/comunicaciones.c:16: parse error before "REGS"
C:/Dev-Cpp/RNO/comunicaciones.c:16: warning: no semicolon at end of struct or union
C:/Dev-Cpp/RNO/comunicaciones.c:17: warning: data definition has no type or storage class


Como les comente casi no conozco C pero estuve buscando si REGS estaba declarado en la cabecera o en otro programa y no encontre nada, ojala y con el programa que les pongo mas abajo me puedan decir que pude ser REGS, si es una estructura, una variable definida o alguna palabra reservada de C para saber si la tengo que declarar en otro lado y de que tipo seria o que hacer

El programa es este:

#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define DC1 0x11      /* XON */
#define DC3 0x13      /* XOFF */
#define INIT 0      /* Función 0 de la Interrupción 14 */
#define SEND 1      /* Función 1 de la Interrupción 14 */
#define READ 2      /* Función 2 de la Interrupción 14 */
#define STAT 3      /* Función 3 de la Interrupción 14 */
#define n 81      /* Longitud máxima de la cadena */

//union REGS v1, v2;

union {
REGS v1;
REGS v2;
} ;

main ( )
{
   void rs232_inic ( );   /* Inicializar puerto dado por DX (0 o 1) */
   void rs232_lect ( );   /* Espera por un caracter de COM */
   void rs232_stat ( );   /* Estado de COM */
   void rs232_envi ( );   /* Enviar caracter XON o XOFF */
   
   FILE *pf;
   char c;
    char cadena[n];   /* Caracteres leídos */
   int i = 0;
   
   if ((pf  = fopen("datos", "w")) == NULL)
   {
      printf ("Error: el fichero datos no se puede abrir");
      exit (1);
   }

   rs232_inic();
   system("cls");
   printf("Recepción de datos. Pulse una tecla para finalizar");
   while ( 1 )
   {
      /* Pulse una tecla para finalizar la recepción */
      if (kbhit() != 0) exit(0);
      rs232_stat();
      if ((v2.h.ah & 1) == 1)      /* ¿Caracter Preparado? */
      {
         rs232_lect();      /* Leer el caracter */
         cadena[i++]; = v2.h.al;   /* Almacenarlo */
         if (i  == n)
         {
            v1.h.al = DC3;   /* Enviar XOFF para detener */
            rs232_envi();   /* la transmisión */
            fwrite(cadena, sizeof(cadena), 1, pf);
            i = 0;
            v1.h.al = DC1;   /* Enviar XON para continuar */
            rs232_envi();   /* la transmisión */
         }
      }
   }
}


void rs232_inic()
{
   v1.x.dx = 0;            /* Seleccionar puerto COM1 */
   v1.h.al = 0xfe;            /* Seleccionar: Baudios, Paridad,
                   * bit Stop y Longitud palabra
                   * ( BBBPPSL )
                   */
   v1.h.ah = INIT;            /* Función (0) de Int 14 a realizar */
   int86 (0x14, &v1, &v2);         /* Llamada a la función */
}

void rs232_lect()
{
   v1.h.ah = READ;            /* Función (2) de Int 14 a realizar */
   int86(20, &v1, &v2);         /* Llamada a la función */
}

void rs232_stat()
{
   v1.h.ah = STAT;            /* Función (3) de Int 14 a realizar */
   int86(20, &v1, &v2);         /* Llamada a la función */
}

void rs232_envi()
{
   v1.h.ah = SEND;            /* Función (1) de Int 14 a realizar */
   int86(20, &v1, &v2);         /* Llamada a la función */
}


Les comento lo que se supone deben hacer estos programas por si alguien ya lo ha hecho y me puede ayudar.

Lo que tiene que hacer este programa y los otros que me dejaron es leer unas tarjetas con chip llamadas SAMARTCARD tipo Mifare y GCL8K con un lector GemEasyAccess 680SP fabricado por GEMPLUS



Gracias por su ayuda

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Error Al Compilar En Un Union
« Respuesta #1 en: Miércoles 4 de Agosto de 2004, 19:10 »
0
Hola!!!!!!!!!!!!!

Segun lo q entendi REGS es un union tambien. Ahora si vos queres usar un union debes anteponerle esa palabra, o sea, hacer algo asi:
Código: Text
  1.  
  2. union
  3. {
  4. union REGS v1;
  5. union REGS v2;
  6. }&#59;
  7.  
  8.  

Salu2!!!!!!!!!!!!!!!

tulum

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Error Al Compilar En Un Union
« Respuesta #2 en: Miércoles 4 de Agosto de 2004, 19:40 »
0
OK

Pero REGS entonces como podria declararlo porque no entiendo que quiere decir esto:

if ((v2.h.ah & 1) == 1)  

o esto  

v1.h.al = DC3;

que es cuando hace referencia a ellos en el programa

ya lo puse como me dijo nicokiki pero ahora me manda los siguientes errores

C:/Dev-Cpp/RNO/comunicaciones.c:16: field `v1' has incomplete type
C:/Dev-Cpp/RNO/comunicaciones.c:17: field `v2' has incomplete type
C:/Dev-Cpp/RNO/comunicaciones.c:18: warning: unnamed struct/union that defines no instances
C:/Dev-Cpp/RNO/comunicaciones.c: In function `main':
C:/Dev-Cpp/RNO/comunicaciones.c:46: `v2' undeclared (first use in this function)
C:/Dev-Cpp/RNO/comunicaciones.c:46: (Each undeclared identifier is reported only once
C:/Dev-Cpp/RNO/comunicaciones.c:46: for each function it appears in.)
C:/Dev-Cpp/RNO/comunicaciones.c:49: parse error before '=' token
C:/Dev-Cpp/RNO/comunicaciones.c:52: `v1' undeclared (first use in this function)

C:/Dev-Cpp/RNO/comunicaciones.c: In function `rs232_inic':
C:/Dev-Cpp/RNO/comunicaciones.c:65: `v1' undeclared (first use in this function)
C:/Dev-Cpp/RNO/comunicaciones.c:71: `v2' undeclared (first use in this function)

C:/Dev-Cpp/RNO/comunicaciones.c: In function `rs232_lect':
C:/Dev-Cpp/RNO/comunicaciones.c:76: `v1' undeclared (first use in this function)
C:/Dev-Cpp/RNO/comunicaciones.c:77: `v2' undeclared (first use in this function)

C:/Dev-Cpp/RNO/comunicaciones.c: In function `rs232_stat':
C:/Dev-Cpp/RNO/comunicaciones.c:82: `v1' undeclared (first use in this function)
C:/Dev-Cpp/RNO/comunicaciones.c:83: `v2' undeclared (first use in this function)

C:/Dev-Cpp/RNO/comunicaciones.c: In function `rs232_envi':
C:/Dev-Cpp/RNO/comunicaciones.c:88: `v1' undeclared (first use in this function)
C:/Dev-Cpp/RNO/comunicaciones.c:89: `v2' undeclared (first use in this function)

Ejecución Terminada


Gracias

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Error Al Compilar En Un Union
« Respuesta #3 en: Jueves 5 de Agosto de 2004, 01:32 »
0
Pero q es REGS??? Yo pense q eran cosas tuyas

No te entiendo

Salu2!!!