C/Visual C - Problema con directivas del preprocesador

   
Vista:

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!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con directivas del preprocesador

Publicado por Tom (479 intervenciones) el 28/11/2007 13:35:29
Durante la fase de precompilación, sizeof no se evalúa.
O sea, que el precompilador no puede evaluar:

#if FRAG_INT_PAG
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con directivas del preprocesador

Publicado por Paqui (1 intervención) el 21/11/2010 15:47:05
Hola!
¿como solucionaste este problema?
Es que tengo el mismo y llevo tiempo dando vueltas y ya no se que más hacer.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar