Foro con Clase C/C++

El preprocesador de C. No sé si es posible hacer esto:

Manu Exposito

Nº de hilos:5

Nº de mensajes:13

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

Tema cerrado

Salvador Pozo

Nº de hilos:0

Nº de mensajes:15

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.

 

Tema cerrado

Manu Exposito

Nº de hilos:5

Nº de mensajes:13

lunes, 5 de abril de 2021


Esta tarde lo pruebo y te comento.

Y como siempre muchísimas gracias!!!!

 

Tema cerrado

Manu Exposito

Nº de hilos:5

Nº de mensajes:13

martes, 20 de abril de 2021


Hola Salvador...

Me basé en lo que me has dicho y va perfectamente.

 

Gracias!!!!

Tema cerrado