Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: soyloqbuskas en 18 Octubre 2012, 13:25 PM

Título: Pasar constante a una funcion de C
Publicado por: soyloqbuskas en 18 Octubre 2012, 13:25 PM
¡Buenas a todos!

Tengo un problemilla con las constantes...Tengo lo siguiente..:


#define longPacket 16384
#define maxNumPacket 20

//declaracion de interfaces a funciones
void initArrayPacket(char * arrayPacket[maxNumPacket], int  maxNumPacket, int longPacket);

// resto del codigo...

void initArrayPacket(char * arrayPacket[maxNumPacket], int  maxNumPacket, int longPacket){
       for(i=0;i<maxNumPacket;i++){
               arrayPacket[i]=(char *)malloc(longPacket);
       }
}

Y me da estos errores al compilar...
Citarserver.c:42:61: error: expected ';', ',' or ')' before numeric constant
server.c: In function 'server':
server.c:63:2: warning: implicit declaration of function 'initArrayPacket' [-Wimplicit-function-declaration]
server.c: At top level:
server.c:283:61: error: expected ';', ',' or ')' before numeric constant

El error de la linea 42 esta en la declaracion de la interfaz de la funcion initArrayPacket();
El error de la linea 63 esta en una llamada a la funcion initArrayPacket();
Y el error de la linea 283 esta en la implementacion de la funcion...

¿Como puedo definir una constante y pasarla por parametro a una funcion?

Gracias, un saludo.
Título: Re: Pasar constante a una funcion de C
Publicado por: rir3760 en 18 Octubre 2012, 16:48 PM
El problema se debe a que estas utilizando el mismo nombre para las macros y los parámetros:
Código (cpp) [Seleccionar]
#define longPacket 16384
#define maxNumPacket 20

void initArrayPacket(char * arrayPacket[maxNumPacket], int  maxNumPacket, int longPacket);


No puedes hacer eso porque el preprocesador actúa primero y lo que recibe el compilador es:
Código (cpp) [Seleccionar]
void initArrayPacket(char * arrayPacket[20], int  20, int 16384);
Ahí es donde se generan los mensajes del compilador.

En cuanto a pasar esos valores no es necesario, utiliza las macros directamente. Por cierto para evitar ese tipo de errores la convención es utilizar nombres de macros con todos sus caracteres en mayúsculas.

Un saludo