Page 42

1.12 Expresiones

-Wall Cuando escribimos un texto en castellano podemos cometer tres tipos de errores: Errores l´exicos: escribimos palabras incorrectamente, con errores ortogr´ aficos, o usamos palabras inexistentes. Por ejemplo: ((herror)), ((l´ ecsico)), ((jerig´ ondor)). Errores sint´ acticos: aunque las palabras son v´ alidas y est´ an correctamente escritas, faltan componentes de una frase (como el sujeto o el verbo), no hay concordancia entre componentes de la frase, los componentes de la frase no ocupan la posici´ on adecuada, etc. Por ejemplo: ((el error sint´ actica son)), ((la compilador detect´ o errores)). Errores sem´ anticos: la frase est´ a correctamente construida pero carece de significado v´ alido en el lenguaje. Por ejemplo: ((el compilador silb´ o una tonada en v´ ıdeo)), ((los osos son enteros con decimales romos)). Lo mismo ocurre con los programas C; pueden contener errores de los tres tipos: Errores l´exicos: usamos car´ acteres no v´ alidos o construimos incorrectamente componentes elementales del programa (como identificadores, cadenas, palabras clave, etc.). Por ejemplo: ((@3)), (("una cadena sin cerrar)). Errores sint´ acticos: construimos mal una sentencia aunque usamos palabras v´ alidas. Por ejemplo: ((while a < 10 { a += 1; })), ((b = 2 * / 3;)). Errores sem´ anticos: la sentencia no tiene un significado ((v´ alido)). Por ejemplo, si a es de tipo float, estas sentencias contienen errores sem´ anticos: ((scanf ("%d", &a);)) (se trata de leer el valor de a como si fuera un entero), ((if (a = 1.0) { a = 2.0; })) (no se est´ a comparando el valor de a con 1.0, sino que se asigna el valor 1.0 a a). El compilador de C no deja pasar un solo error l´exico o sint´ actico: cuando lo detecta, nos informa del error y no genera traducci´ on a c´ odigo de m´ aquina del programa. Con los errores sem´ anticos, sin embargo, el compilador es m´ as indulgente: la filosof´ıa de C es suponer que el programador puede tener una buena raz´ on para hacer algunas de las cosas que expresa en los programas, aunque no siempre tenga un significado ((correcto)) a primera vista. No obstante, y para seg´ un qu´e posibles errores, el compilador puede emitir avisos (warnings). Es posible regular hasta qu´e punto deseamos que el compilador nos proporcione avisos. La opci´ on -Wall (((Warning all)), que significa ((todos los avisos))) activa la detecci´ on de posibles errores sem´ anticos, notific´ andolos como avisos. Este programa err´ oneo, por ejemplo, no genera ning´ un aviso al compilarse sin -Wall : semanticos.c 1 2 3 4 5 6 7 8

E semanticos.c E

#include <stdio.h> int main(void) { float a; scanf ("%d", &a); if (a = 0.0) { a = 2.0; } return 0; }

Pero si lo compilas con ((gcc -Wall semanticos.c -o semanticos)), aparecen avisos (warnings) en pantalla: 

$ gcc -Wall semanticos.c -o semanticos semanticos.c: In function ‘main’: semanticos.c:5: warning: int format, float arg (arg 2) semanticos.c:6: warning: suggest parentheses around assignment used as truth value El compilador advierte de errores sem´ anticos en las l´ıneas 5 y 6. Te har´ a falta bastante pr´ actica para aprender a descifrar mensajes tan parcos o extra˜ nos como los que produce gcc, as´ı que conviene que te acostumbres a compilar con -Wall. (Y hazlo siempre que tu programa presente un comportamiento an´ omalo y no hayas detectado errores l´exicos o sint´ acticos.)

El operador de complemento es unario e invierte todos los bits del valor. Tanto & como | 36

Introducci´ on a la Programaci´ on con C

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement