* Tópicos estudados ** Aula 0: Sobre o curso - Do que vamos precisar... - Requisitos... - O que vamos aprender... - Como vamos aprender... - Aulas divididas em 3 estágios: - Repositório do curso: - Por que aprender... - Como clonar o repositório do curso... - Importante! - Como atualizar o repositório do curso... ** Aula 1: História - Resumo do vídeo... - 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... - Compilação... - Etapas: - Exemplo de um programa em C... - Compilação: - Execução: ** Aula 2: Dados e instruções - Instruções - Dados - Exemplo (=x10.c=) - O que temos aqui: - Outro exemplo (=x10const.c=) - O que há de novo: - Mais um exemplo (=quadrado.c=) - O que há de novo desta vez: - 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 - Exemplo da última aula (=quadrado.c=) - Tipos são tamanhos de dados na memória - Maior número que se pode escrever com 4 bytes (32bits): - O que aconteceu? - Exemplo corrigido (=quadrado-long.c=) - Tipos primitivos - Qualificador =unsigned= (sem sinal): - Qualificador =long=: - Tipos customizados - Exemplos: - Expressões constantes (valores literais) - O tipo =void= - Funções sem valor de retorno: - Funções que não recebem argumentos: - Ponteiros de dados de tipo indeterminado: - Modelagem de tipos (type casting) ** Aula 4: Variáveis e ponteiros - Declaração e definição - Por que isso aconteceu? - Como evitar esse erro? - 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= - Sintaxe - Exemplo do vídeo - Loop =while= - Sintaxe - Exemplo do vídeo - Loop =do..while= - Sintaxe - Exemplo do vídeo - Estrutura de decisão =if..else if..else= - Sintaxe - Exemplo do vídeo - Dica: =else if= abreviado - Estrutura =switch..case= - Sintaxe - Exemplo do vídeo - Bônus: 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 - Exemplo - 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 - Exemplo: programa =soma.c= ** 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 - Um exemplo em C - 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)