C/Visual C - duda con preprocesador

 
Vista:

duda con preprocesador

Publicado por david (2 intervenciones) el 17/06/2004 02:01:49
Hola, soy un estudiante de electronica y en programacion en C hay una parte del examen que es tipo test. El caso es que me pusieron este programa:
#include <stdio.h>
#define PI4 12.56637
#define SUP(r)(PI4*r*r)

main(void)
{
int r=2;
printf("superf: %f\n",SUP(r+1));
}

La salida en ejecucion es 28.132740, pero no entiendo las multiplicaciones q realiza porque yo pense que era 12.56637*3*3 = 113.09733 y veo que no es asi.
Me podría explicar alguien como funciona este ejercicio con el preprocesador?
gracias y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:duda con preprocesador

Publicado por chuidiang (677 intervenciones) el 17/06/2004 09:56:46
El asunto es el siguiente. En la macro está definido

PI4*r*r

reemplaza la r por exactamente lo que has puesto al llamarla, es decir, r+1. La cuenta queda

PI4*r+1*r+1

que simplificado es

PI4 * r + r + 1

No se si sale 28.132740, pero supongo que sí.

Por ello, para definr bien una macro, es muy importante "hartarse" de poner parentesis. La forma correcta sería

#define SUP(r)(PI4*(r)*(r))

con lo que al reemplazar queda

PI4*(r+1)*(r+1)

que es lo que se supone que tiene que hacer.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda con preprocesador

Publicado por david (2 intervenciones) el 17/06/2004 12:56:26
gracias por la respuesta, era eso justamente lo q tenia q dar.
Aun estoy un poco verde en esto del C, además en los tipo test nos pone preguntas a pillar (a alguien le han puesto un examen de programacion tipo test??).
Bueno, además me esta costando un poco tambien lo de los punteros y he entrado en tu web y me he bajado un documento q me parece muy bueno.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar