Para o programa a seguir, indique o escopo (de função, de arquivo, de bloco ou de protótipo de função) de cada um dos seguintes elementos:
a) A variável x em main.
b) A variável y em cube.
c) A função cube.
d) A função main.
e) O protótipo de função para cube.
f) O identificador y no protótipo de função para cube.
Passo 1
Estudante, apesar de programação ser prática, como tudo na vida, envolve um pouco de teoria. E nesse exercício específico, você precisa saber diferenciar os 4 tipos de escopo! Lembre-se que o “escopo” determina onde aquele identificador (Nomes de variáveis, de funções, dentre outras coisas) pode ser “chamado”. Por exemplo, vamos supor que eu criei a variável farinha dentro da função boloFofo. Aquela variável só será conhecida, em geral, dentro de boloFofo. Então, podemos pensar no escopo como o local em que que determinado identificador é conhecido, beleza?
Temos 4 tipos de escopo:
Escopo de função: Apenas labels (esses identificadores funcionam apenas para indicar onde começa um trecho de código, e tem sintaxe “identificador:”. Labels estão presentes na estrutura do switch, em que cada case é uma label, ou junto com o goto) possuem esse tipo de escopo. Apesar de poderem ser usados em qualquer lugar da função, não podem ser chamados fora dela, ok?
Escopo de arquivo: Qualquer identificador declarado fora de uma função será conhecido por TODO o arquivo. Nesse caso, podemos considerar funções e seus protótipos e variáveis globais (que são conhecidas dentro de qualquer função).
Escopo de bloco: Os identificadores só são conhecidos dentro do bloco de código. É o caso de variáveis locais definidas no começo de uma função, bem como seus parâmetros.
Escopo de protótipo de função: Identificadores que possuem escopo de protótipo são as variáveis usadas como parâmetros de um protótipo de função.
Passo 2
a) Considere a main é a função principal do nosso programa. Você concorda, então, que a variável x só será conhecida dentro da main? Por isso, temos um caso de escopo de bloco, pois x é uma variável local da função main.
Passo 3
b) A variável y, na função cube, também possui escopo de bloco. Afinal, a variável y só será conhecida na função cube.
Passo 4
c) Funções caracterizam escopo de arquivo, pois eu posso chamar uma função tranquilamente em qualquer lugar do meu arquivo. Por isso, trata-se de um escopo de arquivo.
Passo 5
d) Pelo mesmo argumento do passo 4, também temos um escopo de arquivo.
Passo 6
e) Protótipo de funções também são conhecidos por todo o arquivo, por isso, caracterizam um escopo de arquivo.
Passo 7
f) O enunciado até já entrega: “o identificador y no protótipo de função”. Se y é uma variável presente no protótipo, então sem dúvidas temos um caso de escopo de protótipo de função.
Resposta
a) Escopo de bloco.
b) Escopo de bloco.
c) Escopo de arquivo.
d) Escopo de arquivo.
e) Escopo de arquivo.
f) Escopo de protótipo de função.