* 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)