Autor Tema: Ejemplos del uso # y ## en C & C++  (Leído 1911 veces)

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

Desconectado CompSystems

  • PIC18
  • ****
  • Mensajes: 488
    • Home Page
Ejemplos del uso # y ## en C & C++
« en: 22 de Octubre de 2015, 16:32:15 »
Hola cachareando en los archivos del proyecto REPRAP (impresoras 3D de hardware abierto)

me encontré con la siguiente sentencia

Código: C++
  1. #define MB(board) (MOTHERBOARD==BOARD_##board)

como ven hay dos numeral seguidos ##
busque en http://www.zator.com/Cpp/E4_9_10b.htm su significado y realice unos ejemplos didácticos espero les pueda servir

Código: C++
  1. #include<iostream>
  2. using namespace std;
  3. int main() {
  4.         #define CONVERTIR_A_CADENA(expresion) (#expresion)
  5.        
  6.         string str_cadena = "hola";
  7.         string str_aux = "Hi"; 
  8.         string str_aux2 = "mars";      
  9.         char chr_caracter = 'A';
  10.        
  11.         cout << str_cadena << endl; // despliega "hola"
  12.        
  13.         str_cadena = CONVERTIR_A_CADENA(hello); // despliega hello
  14.         cout << str_cadena << endl;
  15.        
  16.         str_cadena = CONVERTIR_A_CADENA("hello"); // despliega "hello" con comillas dobles
  17.         cout << str_cadena << endl;
  18.        
  19.         str_cadena = CONVERTIR_A_CADENA(str_aux); // despliega str_aux /!\ no tiene encuenta el valor del identificador definido anteriormente
  20.         cout << str_cadena << endl;
  21.        
  22.         str_cadena = CONVERTIR_A_CADENA(01); // despliega 01
  23.         cout << str_cadena << endl;
  24.        
  25.         str_cadena = CONVERTIR_A_CADENA("01"); // despliega "01" con comillas dobles
  26.         cout << str_cadena << endl;
  27.        
  28.         str_cadena = CONVERTIR_A_CADENA("HELLO ""WORLD"); // despliega una sola cadena
  29.         cout << str_cadena << endl;
  30.        
  31.         str_cadena = 'A';
  32.         cout << str_cadena << endl; // despliega A sin comillas
  33.        
  34.         str_cadena = CONVERTIR_A_CADENA(str_cadena); // /!\ no tiene encuenta el valor del identificador
  35.         cout << str_cadena << endl;
  36.    
  37.         //#undef CONVERTIR_A_CADENA
  38.         //str_cadena = CONVERTIR_A_CADENA("123");
  39.  
  40.         cout <<  endl;
  41.     #define CONCATENAR(expresion1,expresion2) (expresion1##expresion2)
  42.         int int_entero = 1;
  43.         int int_aux = 4321;
  44.         int int_aux1 = 9;
  45.        
  46.         cout << int_entero << endl;// despliega 1
  47.        
  48.         int_entero = CONCATENAR(0,1); // despliega 1
  49.         cout << int_entero << endl;
  50.        
  51.         int_entero = CONCATENAR(00,1); // despliega 1
  52.         cout << int_entero << endl;
  53.        
  54.         int_entero = CONCATENAR(1,0);  // despliega 10
  55.         cout << int_entero << endl;
  56.  
  57.         int_entero = CONCATENAR(int_,aux); // concatena 2 porciones de identificadores y luego llama su contenido
  58.         cout << int_entero << endl; // despliega 4321
  59.        
  60.         str_cadena = CONCATENAR(6,4); // concatena a 64 que equivale a @
  61.         cout << str_cadena << endl; // despliega @
  62.        
  63.         str_cadena = CONCATENAR(6,5); // concatena a 64 que equivale a A
  64.         cout << str_cadena << endl; // despliega A
  65.        
  66.         str_cadena = CONCATENAR(6,5)+1; // concatena a 64  y suma 1 que equivale a B
  67.         cout << str_cadena << endl; // despliega B
  68.        
  69.         chr_caracter = 'Z';
  70.         cout << chr_caracter << endl; // despliega Z
  71.         chr_caracter = CONCATENAR(6,6)-1; // concatena a 66  y resta 1 que equivale a A
  72.         cout << chr_caracter << endl; // despliega A
  73.        
  74.         int_aux = 67;
  75.         cout << char(int_aux) << endl; // despliega C
  76.         str_cadena = CONCATENAR(int_,aux); // concatena 2 porciones de identificadores y luego llama su contenido
  77.         cout << str_cadena << endl; // despliega C
  78.        
  79.         int_aux1 = 69;
  80.         str_cadena = CONCATENAR( int_aux,1 ) ; //
  81.         cout << str_cadena << endl; // despliega E
  82.        
  83.         int id_f = 70;
  84.         int f = 1;
  85.         str_cadena = CONCATENAR( id_,f ) ; //
  86.         cout << str_cadena << endl; // despliega E
  87.        
  88.        
  89.                
  90. }
Desde Colombia