Alguém poderia me explicar por favor o que exatamente isso significa/faz:
"
int f(x) {
static int i = 0;
return ++i+x;
}
"
?
Obrigado.
Em C, o keyword static tem duas funções:
int som (int a, int b) {
static int x = 0;
x += a + b; return x;
}
int main () {
printf("%d\n%d\n%d\n", som(1, 2), som (3, 4),
som(5, 6));
return 0;
}
No exemplo, a saída será:
3
10
21
A variável x será inicializada uma vez e depois guardará o valor que lhe foi dado nas subsequentes chamadas.
2. Quando no ambiente global:
static int a = 0;
static void woo (int f) {
...
}
Nem a nem woo serão acessíveis de outros módulos. Então se eles estivessem dentro de stdio.h, não seria possível acessa-los. Se printf fosse static, não poderíamos usar printf.
Espero ter ajudado,
Renato
Só para completar.
A última linha pode ser reescrita como return (++i)+x. O ++i soma 1 ao valor atual de i antes de executar a linha, então na primeira chamada de f(x) será somado 1 a i, que agora terá valor 1, e depois a função devolverá o valor i+x. Como explicado pelo Renato, na segunda chamada de f(x) o i terá valor 1 e o ++i acrescentará mais a seu valor que passará a ser 2. Resumindo, na primeira vez que f(x) é chamado será devolvido o valor 1+x, na segunda o valor 2+x, na terceira o valor 3+x e assim por diante.
Se o ++ vem depois da variável, por exemplo i++, só é somado 1 ao valor de i depois de executar a linha.