#include<iostream>
using namespace std;
int main() {
#define CONVERTIR_A_CADENA(expresion) (#expresion)
string str_cadena = "hola";
string str_aux = "Hi";
string str_aux2 = "mars";
char chr_caracter = 'A';
cout << str_cadena << endl; // despliega "hola"
str_cadena = CONVERTIR_A_CADENA(hello); // despliega hello
cout << str_cadena << endl;
str_cadena = CONVERTIR_A_CADENA("hello"); // despliega "hello" con comillas dobles
cout << str_cadena << endl;
str_cadena = CONVERTIR_A_CADENA(str_aux); // despliega str_aux /!\ no tiene encuenta el valor del identificador definido anteriormente
cout << str_cadena << endl;
str_cadena = CONVERTIR_A_CADENA(01); // despliega 01
cout << str_cadena << endl;
str_cadena = CONVERTIR_A_CADENA("01"); // despliega "01" con comillas dobles
cout << str_cadena << endl;
str_cadena = CONVERTIR_A_CADENA("HELLO ""WORLD"); // despliega una sola cadena
cout << str_cadena << endl;
str_cadena = 'A';
cout << str_cadena << endl; // despliega A sin comillas
str_cadena = CONVERTIR_A_CADENA(str_cadena); // /!\ no tiene encuenta el valor del identificador
cout << str_cadena << endl;
//#undef CONVERTIR_A_CADENA
//str_cadena = CONVERTIR_A_CADENA("123");
cout << endl;
#define CONCATENAR(expresion1,expresion2) (expresion1##expresion2)
int int_entero = 1;
int int_aux = 4321;
int int_aux1 = 9;
cout << int_entero << endl;// despliega 1
int_entero = CONCATENAR(0,1); // despliega 1
cout << int_entero << endl;
int_entero = CONCATENAR(00,1); // despliega 1
cout << int_entero << endl;
int_entero = CONCATENAR(1,0); // despliega 10
cout << int_entero << endl;
int_entero = CONCATENAR(int_,aux); // concatena 2 porciones de identificadores y luego llama su contenido
cout << int_entero << endl; // despliega 4321
str_cadena = CONCATENAR(6,4); // concatena a 64 que equivale a @
cout << str_cadena << endl; // despliega @
str_cadena = CONCATENAR(6,5); // concatena a 64 que equivale a A
cout << str_cadena << endl; // despliega A
str_cadena = CONCATENAR(6,5)+1; // concatena a 64 y suma 1 que equivale a B
cout << str_cadena << endl; // despliega B
chr_caracter = 'Z';
cout << chr_caracter << endl; // despliega Z
chr_caracter = CONCATENAR(6,6)-1; // concatena a 66 y resta 1 que equivale a A
cout << chr_caracter << endl; // despliega A
int_aux = 67;
cout << char(int_aux) << endl; // despliega C
str_cadena = CONCATENAR(int_,aux); // concatena 2 porciones de identificadores y luego llama su contenido
cout << str_cadena << endl; // despliega C
int_aux1 = 69;
str_cadena = CONCATENAR( int_aux,1 ) ; //
cout << str_cadena << endl; // despliega E
int id_f = 70;
int f = 1;
str_cadena = CONCATENAR( id_,f ) ; //
cout << str_cadena << endl; // despliega E
}