elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  macros en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: macros en C  (Leído 3,525 veces)
fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
macros en C
« en: 24 Enero 2017, 22:49 pm »

Buenas estaba tratando de analizar la siguiente macro:

Código
  1. #define swap(t,x,y) { t _z;  \
  2.                               _z=y; \
  3.                               y=x; \
  4.                               x=_z; }                  
  5.  

según el programa el parámetro t debe ser el nombre de un tipo (int, char o float)que sea del mismo tipo que los parametros x e y para así poder declarar la variable _z del mismo tipo.

mis dudas:
Para que sirve la barra '\' después del punto y coma.
la otra duda que tengo es si los parametros de swap pasan por valor como en cualquier funcion de c.
y la ultima duda, la macros reemplaza un texto de la forma
Código
  1. main(){
  2. swap(t,x,y);
  3. }
por todo lo qu esta adentro de las llaves {} incluyendo las llaves o las llaves no las reemplaza. si remplaza con las llaves no debería dar error.

Código
  1. main(){
  2. { t _z;  \
  3. _z=y; \
  4. y=x; \
  5. x=_z; }
  6. }


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: macros en C
« Respuesta #1 en: 24 Enero 2017, 23:53 pm »

En principio las macros solo se escriben en una única línea pero se usa la barra invertida para indicar al preprocesador que ésta continua en la linea siguiente.

Los datos de los parámetros se pasan literalmente: lo que tu escribas en el parámetro de llamada es lo mismo que va a usar la macro en su conversión.

Las llaves también aparecen en el código final cuando la macro se expande.

Las macros tienen el operado # y ## que convierte en cadena el parámetro y convierte en cadena dos parámetros y los une respectivamente. Se pueden hacer cosas muy interesantes con eso.

Para intercambiar dos valores, sin tener que usar una variable auxiliar puedes usar.
A ^= B;
B ^= A;
A ^= B;


En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: macros en C
« Respuesta #2 en: 25 Enero 2017, 15:29 pm »

Osea al final la macros quedaria asi:
Código
  1. Main(){
  2. { t _z;
  3. _z=y;
  4. y=x;
  5. x=_z; }
  6. }
  7.  

Con dos llaves
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: macros en C
« Respuesta #3 en: 25 Enero 2017, 15:37 pm »

teoricamente

Código
  1. #define swap(t,x,y) { t _z;  \
  2.                               _z=y; \
  3.                               y=x; \
  4.                               x=_z; }                  
  5.  

Código
  1. main(){
  2. swap(int,a,b);
  3. }

queda

Código
  1. main(){
  2. {int _z; _z=b; b=a; a=_z;}
  3.  
  4. }

para que el _z no escape de ese scope
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: macros en C
« Respuesta #4 en: 25 Enero 2017, 18:43 pm »

Si tu compilador es gcc o g++ puedes ver el archivo generado, con las macros expandidas si compilas con la opción -E. Para verlo con tranquilidad lleva llévalo a un archivo:

Código:
gcc -E fuente.c > expandido.c
sinedo fuente.c el nombre de tu archivo fuente.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
macros ?????????
Programación Visual Basic
xato 1 1,642 Último mensaje 27 Diciembre 2006, 21:35 pm
por CeLaYa
If en macros ?
Programación C/C++
ramona98 7 3,243 Último mensaje 21 Agosto 2013, 09:39 am
por ramona98
Macros en C
Programación C/C++
m@o_614 5 3,256 Último mensaje 19 Febrero 2014, 08:22 am
por eferion
macros « 1 2 »
Dudas Generales
debbiecarreno 13 8,607 Último mensaje 27 Mayo 2017, 09:50 am
por Lautaro Villarreal Culic'
Macros VBA
Foro Libre
busqueda 0 1,550 Último mensaje 24 Octubre 2017, 20:41 pm
por busqueda
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines