C/Variables: Diferenzas entre revisións

Contido eliminado Contido engadido
Gallaecio (conversa | contribucións)
→‎Scope: Traduzo
Gallaecio (conversa | contribucións)
→‎Other Modifiers: Traduzo un anaco
Liña 182:
As variables locais estan consideradas coma unha mala práctica de programación, e deberían evitarse sempre que fose posible. Dificultan a lectura do código, crean conflitos cos nomes e poden dificultar a localización de erros de programación (''bugs''). O uso abusivo de variables locais adoita ser signo de pereza e/ou pobreza no deseño. De todos xeitos, nunha situación en que as variables locais poderían crear código máis difícil de ler, non hai problema en utilizar as globais. Máis adiante veremos exemplos de funcións que son máis difíciles de escribir se o facemos sen unha variable global.
 
==Outros modificadores==
== Other Modifiers ==
Velaquí máis modificadores fornecidos polo estándar C para completar. Para o programador principiante poderán ser de utilidade <tt>static</tt> e <tt>extern</tt>. <tt>volatile</tt> resultaralle máis interesante aos programadores avanzados. <tt>register</tt> e <tt>auto</tt> son amplamente desprezados e non adoitan ser de interese para os programadores, sen importar o seu nivel.
 
<tt>'''static'''</tt> pode ser ás veces unha palabra clave útil.
Included here, for completeness, are more of the modifiers that standard C provides. For the beginning programmer, ''static'' and ''extern'' may be useful. ''volatile'' is more of interest to advanced programmers. ''register'' and ''auto'' are largely deprecated and are generally not of interest to either beginning or advanced programmers.
 
Existe a falsa crenza de que o seu único propósito é o de facer que unha variable permaneza na memoria. Cando declaras unha función ou variable global como estática (<tt>static</tt>) vólvese interna. Non poderás acceder a esa función ou variable dende a palabra clave exterior dos outros ficheiros do teu proxecto.
<tt>'''static'''</tt> is sometimes a useful keyword.
It is a common misbelief that the only purpose is to make a variable stay in memory.<br>
When you declare a function or global variable as ''static'' it will become internal. You cannot access the function or variable through the extern (see below) keyword from other files in your project.<br>
When you declare a local variable as ''static'', it is created just like any other variable. However, when the variable goes out of scope (i.e. the block it was local to is finished) the variable stays in memory, retaining its value. The variable stays in memory until the program ends. While this behaviour resembles that of global variables, static variables still obey scope rules and therefore cannot be accessed outside of their scope.<br>
Variables declared static are initialized to zero (or for pointers, NULL) by default.
 
Cando declaras unha variable local como estática, créase coma calquera outra variable. Así e todo, ao saíren do ámbito da variable (por exemplo, remata o bloque para o cal era local) a variable permanece na memoria, quedándose co seu valor. A variable permanece na memoria ata que remata o programa. Aínda que este comportamento aseméllase ao das variables globais, diferéncianse en que as variables estáticas seguen a obedecer ás regras do ámbito e por tanto non pode accederse a elas dende fóra deste.
You can use static in (at least) two different ways. Consider this code, and imagine it is in a file called jfile.c:
 
As variables declaradas coma <tt>static</tt> inicialízanse co valor nulo (<tt>0</tt>) por defecto.
 
Podes utilizar <tt>static</tt> de, polo menos, dúas maneiras. Imaxinemos un código que forma parte do ficheiro <tt>gfile.c</tt>:
 
<source lang=c>
#include <stdio.h>
static int jg = 0;
void uparriba(void)
{
/* Asígnaselle o valor 0 a l cando se inicia o programa. Daquela o resto
/* k is set to 0 when the program starts. The line is then "ignored"
* fordo theprograma restignora ofa the programliña (i.e.por kexemplo, isnon notse setlle toasigna 0o everyvalor time0 up()a
* l cada vez que se chama a arriba()
* is called)
*/
static int kl = 0;
jg++;
kl++;
printf("upChamouse a arriba() called. kl= %2d, jg= %2d\n", kl , jg);
}
void downabaixo(void)
{
static int kl = 0;
jg--;
kl--;
printf("downChamouse a abaixo() called. kl= %2d, jg= %2d\n", kl , jg);
}
Liña 223 ⟶ 224:
int i;
/*/ callChama theá upfunción functionarriba 3 timesveces, thene thelogo downá functionfunción 2abaixo times */dúas.
for (i= 0; i < 3; i++)
uparriba();
for (i= 0; i < 2; i++)
downabaixo();
return 0;
Liña 268 ⟶ 269:
[[pl:C/Zmienne]]
[[fi:C/Muuttujat]]
 
 
=Artigo traducido da wikibooks en castelán=