Hasta ahora todos los problemas planteados hemos utilizado llaves de apertura y cerrado para indicar los bloques de las estructuras condicionales y repetitivas.
Cuando uno comienza a programar es más conveniente concentrarse en la lógica y sintaxis básica que nos provee el lenguaje que ver todas las variantes.
Ahora ya podemos introducir la sintaxis alternativa cuando tenemos una sola instrucción dentro del una estructura condicional o repetitiva.
Las llaves de apertura y cerrado de una estructura condicional y repetitiva en el lenguaje C es opcional si hay una sola instrucción.
Cargar dos enteros y mostrar el mayor.
#include<stdio.h> #include<conio.h> int main() { int v1,v2; printf("Ingrese primer valor:"); scanf("%i",&v1); printf("Ingrese segundo valor:"); scanf("%i",&v2); if (v1>v2) printf("El valor mayor es %i",v1); else printf("El valor mayor es %i",v2); getch(); return 0; }
Como podemos observar tanto el verdadero como el falso del if tienen una sola instrucción, luego las llaves que veníamos disponiendo son opcionales:
if (v1>v2) printf("El valor mayor es %i",v1); else printf("El valor mayor es %i",v2);
Si por cualquier situación hay que agregar una segunda instrucción dentro del verdadero o falso debemos obligatoriamente encerrar entre llaves el bloque.
Mostrar los números del 1 al 10.
#include<stdio.h> #include<conio.h> int main() { int x; for(x=1;x<=10;x++) printf("%i\n",x); getch(); return 0; }
La estructura repetitiva for tiene una sola instrucción por lo que esta permitido disponer dicha actividad sin encerrarla entre llaves:
for(x=1;x<=10;x++) printf("%i\n",x);
Recordemos que veníamos resolviéndolo con la sintaxis:
for(x=1;x<=10;x++) { printf("%i\n",x); }
Como vemos el código queda mucho más conciso sin las llaves.
Pero imaginemos que tenemos que modificar el programa para que muestre una línea de 10 guiones que separe cada número, si no tenemos en claro la existencia de las llaves podríamos pensar que si disponemos el código siguiente funcionaría:
for(x=1;x<=10;x++) printf("%i\n",x); printf("----------\n");
Aunque ahora ya sabemos perfectamente que todo lo que se repite dentro del for debe estar encerrado entre llaves si hay más de una instrucción:
for(x=1;x<=10;x++) { printf("%i\n",x); printf("----------\n"); }
No introducimos esta sintaxis desde los primeros días que comenzamos a aprender a programar para evitar errores como el anterior. Dijimos que toda estructura repetitiva o condicional debe estar encerrada entre llaves.
Por último tener en cuenta que las llaves son opcionales solo para los bloques de las estructuras condicionales y repetitivas. Una función que tiene una única instrucción si debe tener las llaves de apertura y cerrado de dicha función.
Si consultamos el código fuente del sistema operativo Linux veremos que cuando hay estructuras repetitivas con una sola instrucción no se disponen las llaves ya que son opcionales:
Pero si la estructura repetitiva tiene más de una instrucción veremos las llaves que encierran el bloque a repetir: