Programación de red Unix Volumen 1 Cuántas páginas Tercera edición
En comparación con el ejemplo anterior, este programa solo cambia la instrucción de llamada de macro a:
sq=160/SQ(a 1); de la siguiente manera: Si bien el valor de entrada sigue siendo 3, queremos que el resultado sea 10. Pero los resultados reales de la ejecución son los siguientes:
Ingrese un número: 3
sq=160
¿Por qué obtiene ese resultado? Analice la llamada de macro. declaración, en Después de la macro sustitución, se convierte en:
sq=160/(a 1)*(a 1);
Cuando a es 3, debido a "/" y Operadores "*" Si la prioridad y la asociatividad son las mismas, entonces haga 160/(3 1) primero para obtener 40, luego haga 40*(3 1) y finalmente obtenga 160. Para obtener la respuesta correcta, se deben agregar corchetes a toda la cadena en la definición de macro. El programa se modifica de la siguiente manera:
Ejemplo 9.8
#define SQ(y) ((y)*(y) )