Linguagens e Ambientes de Programação (2016/2017)



Prática 8

Ligações. Escopo estático e escopo dinâmico. Modelo de execução. Exercícios de 40 a 45.



  • 40 - Considere o seguinte programa em C:
  • 41 - No programa da pergunta 40, diga qual é ambiente no ponto indicado pelo comentário: "aqui".


  • 42 - No programa da pergunta 40, diga qual é o âmbito da variável global "b".


  • 43 - Considere o seguinte programa em C: Neste programa ocorrem 12 variáveis diferentes, mas apenas 6 nomes de variáveis distintos (a, b, w, x, y, z). Assumindo o uso de escopo dinâmico, diga para cada uma das sequências de chamada que a seguir se indica quais são as variáveis visíveis durante a execução da última função. A alínea a) já está resolvida. [Nota: Este é um exercício académico pois o C usa escopo estático.] Resolva o problema, identificando primeiro as variáveis locais, depois as variáveis não ocultas da função que fez a última chamada, depois as variáveis não ocultas da função que fez a penúltima chamada, etc.
  • 44 - Mostre o estado da pilha à entrada da função h, durante a execução do seguinte programa GCC. Trata-se do segundo exercício do final da aula teórica 14. É parecido com o primeiro exercício do final da aula teórica 14 (já resolvido), sendo a única diferença a passagem da função h como parâmetro para a função g, o que obriga a usar uma closure.

    Já agora, veja ainda o que acontece se ainda for execução da instrução dentro da função h.


  • 45 - Mostre o estado da pilha de execução do seguinte programa GCC, no exato momento em que a pilha atinge a sua altura máxima.

    Já agora, depois continue a execução do programa até ao final.


  • 46 - Resolva o exercício que aparece no final da aula teórica 16. Confirme que a ferramenta Valgrind descobre todos os erros de execução desse programa e os assinala claramente. Não use o Eclipse, porque a compilação e a execução terão de ser feitas na linha de comando (na compilação, usar as opções -g -O0).


  • 47 - A biblioteca "crypt", referida na teórica 16, permite adicionar aos programas suporte para passwords codificadas. Nos exercícios seguintes, use o código da página: http://www.gnu.org/software/libc/manual/html_node/crypt.html