cblc/contents.org

5.4 KiB

Tópicos estudados

Aula 0: Sobre o curso

  • Do que vamos precisar
  • Requisitos
  • O que vamos aprender
  • Como vamos aprender
  • Por que aprender
  • Como clonar o repositório do curso
  • Como atualizar o repositório do curso
  • Conceitos abordados na aula

    • O que é um programa de computador?
    • O que é linguagem de máquina?
    • O que é uma linguagem de programação?
    • O que são linguagens de baixo e alto nível?
    • O que é compilação?
    • O que são implementações?
    • O que são arquiteturas orientadas a palavras?
    • O que são arquiteturas orientadas a bytes?
  • Características da linguagem C
  • Implementação GNU/Linux

    • Compilador
    • Biblioteca C Padrão
    • Obter a especificação padrão do gcc
  • Exemplo de um programa em C

Aula 2: Dados e instruções

  • Instruções
  • Dados
  • Dúvidas

    • Para que serve a função main?
    • Qual é o significado de void?
    • Por que o tipo do retorno de main é int?
    • A função main poderia retornar outros tipos de dados?
    • A função main poderia retornar uma string?
    • Por que o cabeçalho stdio.h foi incluído no programa?

Aula 3: Tipos de dados

  • Tipos são tamanhos de dados na memória

    • Maior número que se pode escrever com 4 bytes (32bits):
  • Tipos primitivos

    • Qualificador unsigned (sem sinal):
    • Qualificador long:
  • Tipos customizados
  • Expressões constantes (valores literais)
  • O tipo void
  • Modelagem de tipos (type casting)

Aula 4: Variáveis e ponteiros

  • Declaração e definição
  • Atributos das variáveis
  • Escopo de variáveis
  • Ponteiros

    • Declaração do ponteiro
  • Perguntas da aula

    • A cada execução do programa, os endereços das variáveis mudam?
    • O ponto da declaração de uma variável global faz diferença?

Aula 5: Estruturas de controle de fluxo

  • Controle de fluxo
  • O loop for
  • Loop while
  • Loop do..while
  • Estrutura de decisão if..else if..else

    • Dica: else if abreviado
  • Estrutura switch..case
  • Expressão condicional (ternária)

Aula 6: Vetores

  • Utilidade dos vetores
  • Declaração e inicialização de vetores

    • Tamanho de um vetor em tempo de compilação
    • Inicialização parcial
  • Acesso aos elementos de um vetor
  • Iteração pelos elementos
  • Vetores e funções

    • Relação entre vetores e ponteiros
  • Vetores de caracteres (strings)

    • Mais diferenças entre vetores e ponteiros

Aula 7: Vetores, ponteiros e strings

  • Notações de acesso
  • Vetores e funções
  • Strings são vetores de caracteres
  • Inicializadores escalares e agregados
  • Vetores de comprimentos variáveis (VLA)

Aula 8: Processos e layout de memória

  • Filosofia UNIX

    • Primeiro princípio: especialização
    • Segundo princípio: modularidade
    • Terceiro princípio: fluxos de texto
  • A interface de linha de comando (CLI)

    • Operadores de controle do shell
  • O que são processos
  • Como programas são executados
  • Layout de memória

    • Conteúdo do binário executável
    • Região do HEAP
    • Região da pilha (stack)

Aula 9: Argumentos e ambiente

  • Vetores e strings

    • Vetores de "ponteiros"
    • Vetores de strings
    • Vetor de strings terminado com NULL
  • Parâmetros da função main
  • Conversão de strings para números

Aula 10: Entrada e saída de dados

  • Tabela de descritores de arquivos

    • Fluxos de dados padrão
    • Uma nota sobre dispositivos
    • Representação em /proc
  • Redirecionamentos e pipes

    • Redirecionamentos
    • Pipes
  • Acumuladores (buffers)

    • Buffers de entrada e saída do programa
    • Buffer de saída do programa
    • Buffer de entrada do programa
    • Entrada padrão não bufferizada

Aula 11: Leitura da entrada padrão com scanf

  • Leitura interativa da entrada padrão
  • Leitura formatada de linhas com scanf

    • Para reduzir as chances de erro
    • Descarregando o buffer de entrada
    • Inicialização de valores numéricos
    • Buffer overflow

Aula 12: Leitura da entrada padrão com fgets

  • A função fgets

    • Uma nota sobre o tipo ponteiro para FILE
  • O problema da quebra de linha
  • Retorno nulo ambíguo
  • Conversão para números

    • Conversão para inteiros com sscanf
    • Conversão para inteiros longos com strtol
    • Outras funções de conversão

Aula 13: Leitura da entrada padrão com read

  • A função read
  • Conversão para string incluindo o terminador nulo

    • Quando não converter os bytes lidos em string
  • O buffer do terminal

    • Descarga do buffer do terminal
    • Implementação de flush_stdin com a chamada read
    • Descarga condicional do buffer do terminal
  • Definindo um prompt

Aula 14: Abertura de arquivos para leitura

  • Diferença entre streams e descritores de arquivos

    • Descritores de arquivos (tipo int)
    • Streams (tipo ponteiro para FILE)
  • Procedimento geral de acesso a arquivos para leitura

    • Abertura
    • Processamento
    • Fechamento

Aula 15: Abertura de arquivos para escrita

  • Modos de abertura de arquivos

    • Modos complementares
    • Modos texto e binário
  • Modos de escrita

    • Abertura de um arquivo para escrita ("w")
    • Abertura de um arquivo para append ("a")
  • Notas gerais

Aula 16: Abertura de arquivos para leitura e escrita

  • Modos de abertura para leitura e escrita
  • Manipulação do ponteiro interno

    • A função fseek
    • Pontos de origem de fseek
    • Abertura de arquivos com "r+"
    • Abertura de arquivos com "a+"
  • Procedimentos úteis

    • Quantidade de linhas
    • Obter o tamanho do arquivo
    • Testar se um arquivo está vazio (0 bytes)