Discussão sobre utilização de linguagens de programação de baixo nível. Estudo da estrutura de um programa em C, variáveis, comandos e subprogramas. Entendimento dos processos de geração de código(pré-processamento, compilação e ligação). Análise da forma de armazenamanto de variáveis em memória. Análise sobre a representação interna de variáveis(operações bitwise). Compreensão da noção de ponteiros e sua relação com o uso de vetores e strings. Estudo sobre passagem de parâmetris com ponteiros. Estudo sobre alocação dinâmica de menória. Estudo sobre ponteiros para funções. Estudo sobre estruturas encadeadas em C.
1. Dominar a forma de representação interna das variáveis em um programa
2. Dominar os mecanismos de manipulação da estrutura interna de variáveis
3. Avaliar e aplicar as melhores técnicas de alocação dinâmica de memória
4. Avaliar e aplicar as melhores técnicas de uso de ponteiros para variáveis
5. Dominar a utilização de aritmética de ponteiros, sendo capaz de avaliar a melhor alternativa em cada situação
6. Dominar a utilização de strings e vetores com ponteiros, sendo capaz de avaliar a melhor alternativa em cada situação
7. Utilizar ponteiros para funções
1.1. Motivação para uso de linguagens de baixo nível
1.2. Processo de compilação: pré-processador, compilador e ligador
1.3. Ferramentas de programação: gdb, lint checker, gprof
1.3.1. Modularização via makefiles
1.3.2. Ambientes de desenvolvimento
1.4. Estrutura básica da linguagem C
1.4.1. Tipos básicos e constantes
1.4.2. Variáveis do tipo ponteiros
1.4.3. Operadores lógicos, aritméticos e de comparação
1.4.4. Comandos de seleção e repetição
1.5. Uso de Subprogramas
1.5.1. Passagem de parâmetros utilizando ponteiros
1.5.2. Escopo de variáveis
1.5.3. Tipos de retorno
1.6. Estruturas de dados
1.6.1. Struct, union
1.6.2. Enumerações, vetores uni e multidimensionais
1.6.3. Strings
1.7. Arquivos
1.8. Criação de Bibliotecas
2.1. Operações bitwise: OR, AND, XOR, NOT, deslocamento
2.2. Mascaramento de bits
2.3. Aplicações típicas de operações bitwise
3.1. Organização das variáveis em memória
3.1.1. Tamanhos dos tipos básicos em memória
3.1.2. Char, short int, int, long int, float, double, pointer
3.1.3. Vetores e Structs
3.2. Diferença entre endereço e valor de uma variável
3.3. Ponteiros
3.3.1. Definição
3.3.2. Passagem de parâmetros com ponteiros
3.3.3. Uso de ponteiro para acesso a arrays, string e structs
3.3.4. Aritmética de Ponteiros
3.3.5. Typecast com ponteiros
3.3.6. Ponteiros para funções e uso de callback functions
3.4. Gerência dinâmica de memória
3.4.1. Alocação
3.4.2. Desalocação
3.4.3. Memory Leaks
3.5. Estruturas encadeadas
3.6. Depuração de ponteiros
Onde T é a média dos trabalhos realizados ao longo da disciplina