Pase de parámetros en C

Pase de parámetros en C

Postby antolin » Fri Mar 13, 2015 7:16 pm

Hola foreros.

Tengo un pequeño problema, a ver si alguien puede ayudarme. Estoy construyendo una función en Borland C++ a la que tengo que pasarle 8 parámetros, los cuatro primeros son obligatorios, y los cuatro últimos no. Con PCOUNT() puedo controlar cuantos parámetros está recibiendo la función, pero CUANTOS SEGUIDOS, creo, el problema es que a veces tengo que pasarle los cuatro primero y el _ o cuatro y el octavo o el séptimo y el octavo, y necesito saber qué parámetros se han pasado y cuales no, pues resulta que esos cuatro últimos parámetros son colores y tengo que poder distinguir entre 0 y NIL porque los valores intermedios vacíos pasan como 0 que respondería al color negro y no como NIL que sería de desear. Y no hay forma de organizar mejor los cuatro últimos, pues a veces hay que pasar unos y a veces otros.

Hay alguna manera de solucionar eso.

Gracias de antemano.
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Pase de parámetros en C

Postby Antonio Linares » Sat Mar 14, 2015 7:11 am

Antolin,

HB_ISNIL( n ) -> lSiNo

te dice si un determinado parámetro es NIL desde C
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42079
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pase de parámetros en C

Postby antolin » Sat Mar 14, 2015 8:10 am

Ok Antonio, muchas gracias, voy a probarlo ahora mismo.
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Pase de parámetros en C

Postby antolin » Sat Mar 14, 2015 8:53 am

Antonio, la expresión:

Code: Select all  Expand view
int   nColor1 = IF( HB_ISNIL( 4 ), 255, hb_parni( 4 )  ) ;

No me funciona, estoy utilizando xHarbour, será por eso? o lo estoy haciendo mal?
Gracias
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Pase de parámetros en C

Postby antolin » Sat Mar 14, 2015 8:58 am

Tampoco me funciona:
Code: Select all  Expand view
if ( HB_ISNIL(4) )  nColor1 = 255 ;

Va a ser por lo de Harbour/xHarbour pues me dice
Code: Select all  Expand view
Call to function 'HB_ISNIL' with no prototype in function

Aunque me queda por buscar HB_ISNIL en alguna cabera diferente. Voy a ver...
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Pase de parámetros en C

Postby antolin » Sat Mar 14, 2015 9:04 am

Vale lo encontré en common.ch, aunque ahora me dice:

Code: Select all  Expand view
Warning W8017 C:\Xharbour\include\common.ch 57: Redefinition of 'TRUE' is not identical


Intento solucionarlo y te cuento
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Pase de parámetros en C

Postby antolin » Sat Mar 14, 2015 9:04 am

Vale lo encontré en common.ch, aunque ahora me dice:

Code: Select all  Expand view
Warning W8017 C:\Xharbour\include\common.ch 57: Redefinition of 'TRUE' is not identical


Intento solucionarlo y te cuento
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Pase de parámetros en C

Postby antolin » Sat Mar 14, 2015 9:08 am

Solucionado, prescindo de common.ch y utilizo directamente ISNIL( <nVar> ). Funciona!!

Ya sé algo nuevo.

Gracias
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Pase de parámetros en C

Postby jnavas » Sun Mar 15, 2015 8:29 am

antolin wrote:Solucionado, prescindo de common.ch y utilizo directamente ISNIL( <nVar> ). Funciona!!

Ya sé algo nuevo.

Gracias

Antolin
Buen dia, puedes publicar el código?
User avatar
jnavas
 
Posts: 479
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: Pase de parámetros en C

Postby antolin » Tue Mar 17, 2015 1:56 pm

Es muy fácil, si quiero controlar el parámetro número 7 pues escribo:
Code: Select all  Expand view
  int   nDifer  = IF( ISNIL(7),    25, hb_parni( 7 ) ) ;
 
Y ya está.

Un saludo
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Pase de parámetros en C

Postby xmanuel » Tue Mar 17, 2015 8:02 pm

Antolín...
No es por ná pero esto esta mu mal
Code: Select all  Expand view

 int   nDifer  = IF( ISNIL(7),    25, hb_parni( 7 ) ) ;
 


Por lo que veo tu esperas un entero...
Si lemandas una cadena como septimo parametro nDifer lo igualara a NULL.
No sé si lo entiendes?
Tendrías que comprobar además del nil que el tipo sea correcto :-(

Yo haría algo así:
Code: Select all  Expand view

int nDifer;
if( hb_param( 7, HB_IT_NUMERIC ) != NULL )
{
       nDifer = hb_parni( 7 );
}
else
{
     nDifer = 25;
}
 

o más reducido:
Code: Select all  Expand view

int nDifer = hb_param( 7, HB_IT_NUMERIC ) ? hb_parni( 7 ), 25;
 


Espero que valga ;-)
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 761
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Pase de parámetros en C

Postby antolin » Fri Mar 20, 2015 4:58 pm

Ok Manuel, copiado.

En este caso concreto, no me era necesario, pues siempre sé lo que voy a mandar a esa función, pero si es cierto que me viene mu bien pá otras funciones. Muchá grasia...
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55
antolin
 
Posts: 498
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 41 guests