Sentencias
Las sentencias son fragmentos del programa C que se ejecutan en secuencia. El cuerpo de cualquier función es un sentencia compuesto, que a su vez es una secuencia de sentencias y declaraciones:
int main(void)
{ // inicio de una sentencia compuesta
int n = 1; // declaración (no una sentencia)
n = n+1; // sentencia de expresión
printf("n = %d\n", n); // sentencia de expresión
return 0; // sentencia return
} // fin de la sentencia compuesta, fin del cuerpo de la función
Hay cinco tipos de sentencias:
Etiquetas (Labels)
Cualquier sentencia puede ser "etiquetada", proporcionando un nombre seguido de dos puntos antes del enunciado en sí.
identificador : sentencia
|
(1) | ||||||||
case expresión_constante : sentencia
|
(2) | ||||||||
default : sentencia
|
(3) | ||||||||
Cualquier sentencia(pero no una declaración) puede ir precedida de cualquier número de etiquetas, cada una de las cuales declara que el identificador es un nombre de etiqueta, que debe ser único dentro de la función de encapsulamiento (en otras palabras, los nombres de las etiquetas tienen un alcance de función).
La declaración de la etiqueta no tiene efecto por sí misma, no altera el flujo de control ni modifica el comportamiento de la declaración que sigue de ninguna manera.
Sentencias compuestas
Una sentencia compuesta, o bloque, es una secuencia entre corchetes de sentencias y declaraciones.
{ sentencia | declaracion...(opcional) }
|
(1) | ||||||||
La sentencia compuesta permite agrupar un conjunto de sentencias y sentencias en una unidad que se puede utilizar en cualquier lugar donde se espere una sentencia única (por ejemplo, en una sentencia if} o una sentencia iterativa):
if (expr) // inicio de la sentencia if
{ // inicio del bloque
int n = 1; // declaracion
printf("%d\n", n); // sentencia de expresión
} // fin del bloque, fin de la sentencia if
Cada sentencia compuesta introduce su propio ámbito de bloque.
Los inicializadores de las variables con duración de almacenamiento automáticos declarados dentro de un bloque y los declaradores VLA se ejecutan cuando el flujo de control pasa por encima de estas declaraciones en orden, como si fueran sentencias:
int main(void)
{ // inicio del bloque
{ // inicio del bloque
puts("hello"); // sentencia de expresión
int n = printf("abc\n"); // declaracion, imprime "abc", almacena 4 en n
int a[n*printf("1\n")]; // declaracion, imprime "1", asigna 8*sizeof(int)
printf("%zu\n", sizeof(a)); // sentencia de expresión
} // fin de bloque, fin del ámbito de n y a
int n = 7; // n puede ser reutilizado
}
Sentencias de expresión
Una expresión seguida de punto y coma es una sentencia.
expresión (opcional) ;
|
(1) | ||||||||
La mayoría de las sentencias de un programa C típico son sentencias de expresión, tales como asignaciones o llamadas de función.
Una sentencia de expresión sin expresión se denomina una sentencia nula. Se utiliza a menudo para proporcionar un cuerpo vacío a un bucle for o while. También puede utilizarse para llevar una etiqueta al final de una sentencia compuesta o antes de una declaración:
puts("hello"); // sentencia de expresión
char *s;
while (*s++ != '\0')
; // nsentencia nula
Sentencias de selección
Las sentencias de selección eligen una de varias sentencias dependiendo del valor de una expresión.
if ( expresión ) sentencia
|
(1) | ||||||||
if ( expresión ) sentencia else sentencia
|
(2) | ||||||||
switch ( expresión ) sentencia
|
(3) | ||||||||
Sentencias de iteración
Las sentencias de iteración ejecutan repetidamente una sentencia.
while ( expresión ) sentencia
|
(1) | ||||||||
do sentencia while ( expresión ) ;
|
(2) | ||||||||
for ( cláusula_inicial ; expresión (opcional) ; expresión (opcional) ) sentencia
|
(3) | ||||||||
Sentencias de salto
Las instrucciones de salto transfieren incondicionalmente el control de flujo.
break ;
|
(1) | ||||||||
continue ;
|
(2) | ||||||||
return expresión (opcional) ;
|
(3) | ||||||||
goto identificador ;
|
(4) | ||||||||
Referencias
- Standard C11 (ISO/IEC 9899:2011):
- 6.8 Statements and blocks (p: 146-154)
- Standard C99 (ISO/IEC 9899:1999):
- 6.8 Statements and blocks (p: 131-139)
- Standard C89/C90 (ISO/IEC 9899:1990):
- 3.6 STATEMENTS
Véase también
Documentación de C++ para Sentencias
|