Foro con Clase C/C++
El preprocesador de C. No sé si es posible hacer esto:
Manu Exposito
Nº de hilos:6
Nº de mensajes:14
lunes, 5 de abril de 2021
Tengo esto y me funciona perfectamente
#define METHOD( clsName, szName ) hb_clsAdd( usClassH, #szName, HB_FUNCNAME( clsName##_##szName ) );
Es una seudo función a la que le paso dos cadenas sin las comillas " y con el uso del prepro las convierte en cadenas #szName y concateno las cadenas pasadas:
METHOD( CLSNOMBRE, NOMBRE ); lo convierte en hb_clsAdd( usClassH, "NOMBRE" , HB_FUNCNAME( "CLSNOMBRE_NOMBRE" ) );
Pues bien lo que quisiera saber como hacer que CLSNOMBRE se una variable del programa en vez de pasarla tal que así:
...
char * szClsNombre = "CLSNOMBRE";
...
METHOD( NOMBRE ); lo convierta en hb_clsAdd( usClassH, "NOMBRE" , HB_FUNCNAME( "CLSNOMBRE_NOMBRE" ) );
...
No se si me has entendo Salvador.
En definitiva, que la concatenación sea a partir de una varianle existente en el programa donde se usa la seudofunción "CLSNOMBRE_NOMBRE"
Como tengo que poner el define?
Como siempre muchas gracias por anticipado
Salvador Pozo
Nº de hilos:0
Nº de mensajes:25
lunes, 5 de abril de 2021
Hola:
Es un problema bastante enrevesado. :)
No creo que haya entendido el objetivo de tu progrrama.
A ver si esta solución te sirve:
----8<------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int usClassH=10; // Esta parte me la he inventado :)
char *cad[255];
#define CONCAT(szcad) ( strcat(strcat(strcpy(cad, szclsName), "_"), szcad) )
#define HB_FUNCNAME(szCad) (#szCad)
#define HB_FUNCNAME2(szCad) ( CONCAT(#szCad) )
#define METHOD( clsName, szName ) hb_clsAdd( usClassH, #szName, HB_FUNCNAME( clsName##_##szName ) );
#define METHOD2( szName ) hb_clsAdd( usClassH, #szName, HB_FUNCNAME2( szName ) );
int hb_clsAdd( int usClassH, char *nombre , char *hb ) { // Esta parte también me la he inventado :)
printf("class: %d, nombre: %s HB: %s\n", usClassH, nombre, hb);
return 1;
}
int main()
{
char *szclsName="CLSNOMBREx";
METHOD( CLSNOMBRE, NOMBRE );
METHOD2( NOMBRE );
return 0;
}
----8<------
No estoy seguro de si es eso lo que querías.
Hasta pronto.
Manu Exposito
Nº de hilos:6
Nº de mensajes:14
lunes, 5 de abril de 2021
Esta tarde lo pruebo y te comento.
Y como siempre muchísimas gracias!!!!
Manu Exposito
Nº de hilos:6
Nº de mensajes:14
martes, 20 de abril de 2021
Hola Salvador...
Me basé en lo que me has dicho y va perfectamente.
Gracias!!!!