Problema con directivas del preprocesador
Publicado por Joaquín Llano (10 intervenciones) el 23/11/2007 21:32:32
Hola a todos.
Estoy intentando compilar el siguiente código en linux (Ubuntu 7.04 con gcc 4.1.2) y obtengo el error:
util.h:53:5: error: falta un operador binario antes del elemento "(".
Lo he intentado compilar en Windows con Dev C++ y me pasa lo mismo, sin embargo con el compilador de Borland C++ 5.02 compila perfectamente.
El código del fichero .h es el siquiente:
#define PAG_SZ 2048
// Declaramos el tipo para la pagina cabecera
typedef struct {
unsigned pagid;
unsigned ocupacion;
char nombre_fichero[50];
unsigned pag_sz; // Tamaño de las páginas
unsigned reg_sz; // Tamaño de los registros (caso de longitud fija)
char resto[PAG_SZ - 4*sizeof (unsigned)-50];
} CAB_TIPO;
#define CAB_SZ (sizeof(CAB_TIPO))
// Declaramos el tipo de los registros que vamos a usar
typedef struct {
char dia, mes, anio;
} FECHA;
typedef struct {
char CodCli[5];
int IdPedido;
char Nombre[40];
char Ciudad[15];
FECHA Fecha;
float Importe;
} REG_TIPO;
// Para declarar el tipo de la pagina necesitamos las siguientes constantes:
#define REG_SZ (sizeof(REG_TIPO)) // El tamaño del registro
#define CAB_PAG_SZ (sizeof (unsigned int) ) // Tamaño de la cabecera de pagina
#define DAT_PAG_SZ (PAG_SZ - CAB_PAG_SZ) // Tamaño de la zona destinada a datos dentro de la pagina
#define NUM_REG_PAG (unsigned) (DAT_PAG_SZ / REG_SZ) // Numero de registros que caben en la pagina
---> He aquí el causante del error #define FRAG_INT_PAG (DAT_PAG_SZ % REG_SZ) // Bytes desperdiciados dentro de la pagina
// Ahora podemos declarar el tipo de la pagina
typedef struct {
unsigned pagid;
REG_TIPO reg[NUM_REG_PAG];
---> El error lo da en este IF #if FRAG_INT_PAG
char fragmentacion[FRAG_INT_PAG];
#endif
} PAG_TIPO;
He estado haciendo algunas pruebas y parece ser que se debe a usar el operador sizeof, puesto que si en su lugar coloco por ejemplo un número el programa compila perfectamente.
¿Alguien sabe a qué puede deberse?
Muchas gracias por vuestra atención.
Saludos!
Estoy intentando compilar el siguiente código en linux (Ubuntu 7.04 con gcc 4.1.2) y obtengo el error:
util.h:53:5: error: falta un operador binario antes del elemento "(".
Lo he intentado compilar en Windows con Dev C++ y me pasa lo mismo, sin embargo con el compilador de Borland C++ 5.02 compila perfectamente.
El código del fichero .h es el siquiente:
#define PAG_SZ 2048
// Declaramos el tipo para la pagina cabecera
typedef struct {
unsigned pagid;
unsigned ocupacion;
char nombre_fichero[50];
unsigned pag_sz; // Tamaño de las páginas
unsigned reg_sz; // Tamaño de los registros (caso de longitud fija)
char resto[PAG_SZ - 4*sizeof (unsigned)-50];
} CAB_TIPO;
#define CAB_SZ (sizeof(CAB_TIPO))
// Declaramos el tipo de los registros que vamos a usar
typedef struct {
char dia, mes, anio;
} FECHA;
typedef struct {
char CodCli[5];
int IdPedido;
char Nombre[40];
char Ciudad[15];
FECHA Fecha;
float Importe;
} REG_TIPO;
// Para declarar el tipo de la pagina necesitamos las siguientes constantes:
#define REG_SZ (sizeof(REG_TIPO)) // El tamaño del registro
#define CAB_PAG_SZ (sizeof (unsigned int) ) // Tamaño de la cabecera de pagina
#define DAT_PAG_SZ (PAG_SZ - CAB_PAG_SZ) // Tamaño de la zona destinada a datos dentro de la pagina
#define NUM_REG_PAG (unsigned) (DAT_PAG_SZ / REG_SZ) // Numero de registros que caben en la pagina
---> He aquí el causante del error #define FRAG_INT_PAG (DAT_PAG_SZ % REG_SZ) // Bytes desperdiciados dentro de la pagina
// Ahora podemos declarar el tipo de la pagina
typedef struct {
unsigned pagid;
REG_TIPO reg[NUM_REG_PAG];
---> El error lo da en este IF #if FRAG_INT_PAG
char fragmentacion[FRAG_INT_PAG];
#endif
} PAG_TIPO;
He estado haciendo algunas pruebas y parece ser que se debe a usar el operador sizeof, puesto que si en su lugar coloco por ejemplo un número el programa compila perfectamente.
¿Alguien sabe a qué puede deberse?
Muchas gracias por vuestra atención.
Saludos!
Valora esta pregunta


0