¡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.
El problema se debe a que estas utilizando el mismo nombre para las macros y los parámetros:
#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:
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