Pasar constante a una funcion de C

Iniciado por soyloqbuskas, 18 Octubre 2012, 13:25 PM

0 Miembros y 1 Visitante están viendo este tema.

soyloqbuskas

¡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.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language