Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior | |||
c:variaveis [2023/08/16 20:10] – [Outros modificadores] maziero | c:variaveis [2023/08/16 20:11] (atual) – [Alocação] maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Tópicos sobre variáveis ====== | ||
+ | |||
+ | FIXME Conteúdo em preparação | ||
+ | |||
+ | |||
+ | ==== Escopo ==== | ||
+ | |||
+ | Por " | ||
+ | |||
+ | * **Variáveis globais** podem ser acessadas a partir de qualquer ponto do código-fonte. | ||
+ | |||
+ | * **Variáveis locais** são definidas em um bloco e só podem ser acessadas dentro daquele bloco. É o caso das variáveis definidas dentro de uma função, dos parâmetros da função e de variáveis locais usadas em laços '' | ||
+ | |||
+ | O trecho de código a seguir ilustra a declaração e uso de variáveis globais e locais: | ||
+ | |||
+ | FIXME achar código mais curto ou função mais simples | ||
+ | |||
+ | <code c> | ||
+ | #include < | ||
+ | |||
+ | int teto ; // variável global, pode ser acessada de qualquer lugar | ||
+ | |||
+ | int somaN (int n) // variável local " | ||
+ | { | ||
+ | int soma = 0 ; // idem, " | ||
+ | |||
+ | for (int i = 0; i < n; i++) // " | ||
+ | { | ||
+ | int aux = soma + i ; // idem, " | ||
+ | if (aux < teto) | ||
+ | soma = aux ; | ||
+ | } | ||
+ | return (soma) ; | ||
+ | } | ||
+ | |||
+ | int main () | ||
+ | { | ||
+ | int val = 10 ; // variável local | ||
+ | printf (" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Uma variável local pode ter o mesmo nome de uma variável global ou de uma variável local declarada em um bloco mais externo. Ao acessar uma variável, será buscada a definição feita no mesmo bloco, ou no bloco externo mais próximo, como mostra o exemplo a seguir: | ||
+ | |||
+ | <code c> | ||
+ | #include < | ||
+ | |||
+ | int valor = 100 ; // variável global | ||
+ | |||
+ | void func () | ||
+ | { | ||
+ | int valor = 5 ; // variável local | ||
+ | |||
+ | printf ("2: %d\n", valor) ; | ||
+ | { | ||
+ | int valor = 17 ; // nova variável local, dentro do bloco | ||
+ | |||
+ | printf ("3: %d\n", valor) ; | ||
+ | } | ||
+ | printf ("4: %d\n", valor) ; | ||
+ | } | ||
+ | |||
+ | int main () | ||
+ | { | ||
+ | printf ("1: %d\n", valor) ; | ||
+ | func () ; | ||
+ | printf ("5: %d\n", valor) ; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | O resultado dessa execução é o seguinte (tente explicá-lo!): | ||
+ | |||
+ | < | ||
+ | 1: 100 | ||
+ | 2: 5 | ||
+ | 3: 17 | ||
+ | 4: 5 | ||
+ | 5: 100 | ||
+ | </ | ||
+ | |||
+ | Por default, o escopo de uma variável global é limitado ao arquivo onde ela está definida. Todavia, em um projeto com vários arquivos, pode-se referenciar uma variável global definida em outro arquivo usando o modificador '' | ||
+ | |||
+ | Por exemplo, supondo que '' | ||
+ | |||
+ | <code c arq1.c> | ||
+ | // aqui a variável é definida, alocada e inicializada | ||
+ | int default = 100 ; | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Caso deseje-se acessar essa variável global em outro arquivo do mesmo projeto, basta declará-la como '' | ||
+ | |||
+ | <code c arq2.c> | ||
+ | // aqui a variável é somente declarada | ||
+ | extern int default ; | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | A declaração '' | ||
+ | |||
+ | ==== Alocação ==== | ||
+ | |||
+ | FIXME Explicar '' | ||
+ | |||
+ | * '' | ||
+ | |||
+ | * '' | ||
+ | |||
+ | * '' | ||
+ | |||
+ | * '' | ||
+ | |||
+ | ==== Constantes ==== | ||
+ | |||
+ | FIXME Falar sobre '' | ||
+ | |||
+ | * '' | ||
+ | |||
+ | ==== Outros modificadores ==== | ||
+ | |||
+ | * '' | ||
+ | |||
+ | * '' | ||