C/Instrucións de control: Diferenzas entre revisións

Contido eliminado Contido engadido
Gallaecio (conversa | contribucións)
Xa conten todo o que antes estaba en artigos separados no libro de C
Gallaecio (conversa | contribucións)
Completado con información da versión en inglés.
Liña 25:
 
Por suposto, o uso dos bloques de instrucións só ten sentido cando se pretende que a unha condición respondan máis dunha instrución. Non ten sentido utilizar un bloque nos casos en que só hai unha instrución a executar. A continuación, á hora de explicar a sintaxe das instrucións de control que conteñen condicións, usaranse unhas veces instrucións soltas e outras bloques delas, e cómpre lembrar que o seu uso é indistinto.
 
==<source lang=c enclose=none>break</source>==
A instrución de control <source lang=c enclose=none>break</source> permite saír do [[{{PAGENAME}}#Bloques de instrucións|bloque de instrucións]] no que está o fluxo de control do programa. A sintaxe de uso desta sentencia de control pode comprenderse co seguinte exemplo:
<source lang=c>
instrución 1;
instrución 2;
break;
instrución 3;
instrución 4;
</source>
No que se executarían só as instrucións 1, 2 e 4.
 
==<source lang=c enclose=none>return</source>==
A instrución de control <source lang=c enclose=none>return</source> establece o valor que devolve a función na que está presente. Ao executarse dita sentencia, remata a execución da función na que estaba, e vólvese á función dende a cal se [[{{BASEPAGENAME}}/Funcións#Chamada a unha función|chamou a esta]]. A súa sintaxe fundamental é a seguinte:
<source lang=c>
return valor;
</source>
 
Onde <code>valor</code> pode ser tanto unha [[{{BASEPAGENAME}}/Variables|variable]] coma un [[{{BASEPAGENAME}}/Constantes literais|valor]].
 
En caso de que a función non devolva ningún valor, pódese volver á función que a chamou omitindo o <code>valor</code>. Véxase o seguinte exemplo:
<source lang=c>
return;
</source>
 
==<source lang=c enclose=none>if</source>==
A instrución de control <source lang=c enclose=none>if</source> permite establecer unha condición que, de cumprirse, provoque a execución dunha instrución. A súa sintaxe fundamentarfundamental sería a seguinte:
<source lang=c>
if(condición)
Liña 61 ⟶ 87:
Adóitanse seguir as instrucións asignadas a cada opción dunha instrución de control [[{{PAGENAME}}#break|<source lang=c enclose=none>break</source>]] ou [[{{PAGENAME}}#return|<source lang=c enclose=none>return</source>]], mesmo no último caso (xeralmente o <code>default</code>), onde sería completamente innecesario un <code>break</code>. De non utilizarse unha destas instrucións de control, non se executarían só as instrucións asignadas ao <source lang=c enclose=none>case</source> co valor da expresión, senón todas as instrucións dos <source lang=c enclose=none>case</source> seguintes. Mediante o <source lang=c enclose=none>break;</source> sáese do [[{{PAGENAME}}#Bloques de instrucións|bloque]] do <source lang=c enclose=none>switch</source>, mentres que mediante o <source lang=c enclose=none>return</source> sáese de toda a función que contén a instrución de control.
 
Por último, <source lang=c enclose=none>default:</source> indica as instrucións que se executarán en caso de que o valor da expresión non se corresponda con ningún dos <source lang=c enclose=none>case</source>. A súa inclusión na instrución de control é opcional.
 
===“Caída”===
O comportamento de executar as instrucións dos seguintes <source lang=c enclose=none>case</source> se non se engade un <source lang=c enclose=none>break</source> ou un <source lang=c enclose=none>return</source> pode aproveitarse nalgunhas ocasións para obter un comportamento específico. Pero se no mesmo código traballa ou vai traballar máis dun programador, cómpre indicar que isto se está facendo a propósito para evitar que alguén “corrixa o erro”. Isto faise xeralmente mediante o comentario «<source lang=c enclose=none>// CAÍDA</source>», ou se se trata dun proxecto internacional, «<source lang=c enclose=none>// FALL THROUGH</source>». Véxase o seguinte exemplo:
<source lang="c">
switch(expresión){
case 1:
printf("O valor da expresión era 1.\n");
break;
case 2:
printf("O valor da expresión é 2.\n");
// CAÍDA
case 3:
printf("O valor da expresión é 2 ou 3.\n" );
break;
}
</source>
 
E se a expresión valese 2, imprimiríase o seguinte:
<pre>
O valor da expresión é 2.
O valor da expresión é 2 ou 3.
</pre>
 
===Acumulación de valores nun <source lang=c enclose=none>switch</source>===
Liña 87 ⟶ 135:
}
</source>
 
==<source lang=c enclose=none>break</source>==
A instrución de control <source lang=c enclose=none>break</source> permite saír do [[{{PAGENAME}}#Bloques de instrucións|bloque de instrucións]] no que está o fluxo de control do programa. A sintaxe de uso desta sentencia de control pode comprenderse co seguinte exemplo:
<source lang=c>
instrución 1;
instrución 2;
break;
instrución 3;
instrución 4;
</source>
No que se executarían só as instrucións 1, 2 e 4.
 
==Ciclos==
Os ciclos consisten en instrucións que se repiten ata que se cumpra unha condición. As instrucións dos ciclos non varían durante a súa execución, pero poden varias os valores das variables, de xeito que as posibilidades vólvense infinitas.
En C existen tres instrucións de control para a creación de ciclos, cada unha coas súas peculiaridades, e se ben xeralmente se poden adaptar todos os ciclos para facer as mesmas funcións, en cada situación resultará máis eficiente, elegante, ou simplemente evidente a utilización dun ciclo concreto.
 
En C existen tres instrucións de control para a creación de ciclos, cada unha coas súas peculiaridades, e se ben xeralmente se poden adaptar todos os ciclos para facer as mesmas funcións, en cada situación resultará máis eficiente, elegante, ou simplemente evidente a utilización dun ciclo concreto. Algo que si que teñen todos os ciclos en común é que a súa execución non se detén no mesmo intre en que a condición se volve falsa, senón cando esta é falsa ao avaliala, algo que se fai xusto antes de comezar a execución da instrución ou bloque de instrucións do ciclo.
Cómpre lembrar de cara aos ciclos que se poden crear expresións que sempre son certas, como sería a expresión «<code>-1</code>», de xeito que se conseguiría un ciclo sen fin. Por suposto, hai maneiras de saír co ciclo alternativas a que a condición cambie, coma as instrucións de control [[{{PAGENAME}}#break|<source lang=c enclose=none>break</source>]] ou [[{{PAGENAME}}#return|<source lang=c enclose=none>return</source>]].
 
===Ciclos sen fin===
Cómpre lembrar de cara aos ciclos que se poden crear expresións que sempre son certas, como sería a expresión «<code>-1</code>», de xeito que se conseguiría o que se denomina un ciclo“ciclo sen finfin”. Por suposto, hai maneiras de saír co ciclo alternativas a que a condición cambie, coma as instrucións de control [[{{PAGENAME}}#break|<source lang=c enclose=none>break</source>]] ou [[{{PAGENAME}}#return|<source lang=c enclose=none>return</source>]]. Pero se nun ciclo sen fin non se establece algunha forma de saír del, o programa non deixará de executarse, e haberá que interromper a súa execución manualmente.
 
===<source lang=c enclose=none>continue</source>===
Ademais das instrucións de control [[{{PAGENAME}}#break|<source lang=c enclose=none>break</source>]] e [[{{PAGENAME}}#return|<source lang=c enclose=none>return</source>]], o fluxo de control dos ciclos pode alterarse mediante a instrución <source lang=c enclose=none>continue</source>. Dita instrución, ao executarse, sáltase o resto do ciclo e volve avaliar a condición (e se é certa repite o ciclo, e en caso contrario non o repite).
 
===<source lang=c enclose=none>while</source>===
Liña 124 ⟶ 165:
 
===<source lang=c enclose=none>for</source>===
O ciclo <source lang=c enclose=none>for</source> executa unha instrución inicial ─utilizada xeralmente para establecer o valor inicial dunha variable─, e mentres se cumpra ─sexa certa (distinta de cero)─ unha condición, executa unha instrución (ou bloque de instrucións) seguida dunha instrución final ─que adoitanadoita cambiar o valor dalgunha variable de cara a modificar o valor da expresión da condición─ que se executa sempre entre a instrución do ciclo e a seguinte comprobación de se se cumpre a condición. Esta sería a súa sintaxe fundamental:
 
<source lang=c>
Liña 161 ⟶ 202:
</pre>
 
Cómpre saber que ao executar unha instrución de control [[{{PAGENAME}}#continue|<source lang=c enclose=none>continue</source>]] neste tipo de ciclo, a continuación execútase a instrución final, logo avalíase a condición, e logo vólvese ao contido do ciclo.
==<source lang=c enclose=none>return</source>==
 
A instrución de control <source lang=c enclose=none>return</source> establece o valor que devolve a función na que está presente. Ao executarse dita sentencia, remata a execución da función na que estaba, e vólvese á función dende a cal se [[{{BASEPAGENAME}}/Funcións#Chamada a unha función|chamou a esta]]. A súa sintaxe fundamental é a seguinte:
Outra curiosidade deste ciclo é o feito de que a condición, así coma as outras dúas instrucións entre parénteses, pode obviarse, dando como resultado un [[{{PAGENAME}}#Ciclos sen fin|ciclo sen fin]]. Valga de exemplo o seguinte código:
<source lang=c>
for(;;)
return valor;
printf("Ciclo sen fin.\n");
// Repite en pantalla «Ciclo sen fin» ata que se interrompa
// manualmente a execución do programa.
</source>
 
==<source lang=c enclose=none>goto</source>==
Onde <code>valor</code> pode ser tanto unha [[{{BASEPAGENAME}}/Variables|variable]] coma un [[{{BASEPAGENAME}}/Constantes literais|valor]].
A instrución de control <source lang=c enclose=none>goto</source> é un mecanismo de control que permite saltar dunha liña de código a outra.
 
O seu uso é sinxelo. Abonda con colocar nunha liña de código unha etiqueta ─un texto calquera─ seguido de dous puntos, «<code>:</code>», e noutra liña de código escribir <source lang=c enclose=none>goto</source> seguido de dita etiqueta. A seguinte sería a súa sintaxe fundamental:
En caso de que a función non devolva ningún valor, pódese volver á función que a chamou omitindo o <code>valor</code>. Véxase o seguinte exemplo:
<source lang=c>
etiqueta:
return;
// ...
goto etiqueta;
</source>
 
O uso desta instrución de control está desaconsellado salvo para os casos nos que sexa imprescindible o seu uso ou en que este sexa moito máis comprensible á hora de ler o código que o seu equivalente sen esta instrución. Algunhas situacións en que podería usarse esta instrución son as seguintes:
*Saír dun ciclo con moitos bloques (<source lang=c enclose=none>break</source> non pode saír máis que dun bloque). En todos os casos sería posible saír do ciclo sen necesidade de usar o <source lang=c enclose=none>goto</source>, pero pode resultar nun código case ilexible.
*Desfacer accións de maneira ordenada, como liberar memoria.
 
 
Liña 179 ⟶ 231:
<!-- Categorías: -->
[[Categoría:C ─ Elementos|Instrucions de control]]
 
<!-- Noutras linguas: -->
[[en:C Programming/Control]]