Ferramentas do usuário

Ferramentas do site


info:ciso:start

Sobre C

Anotações referentes sobre leituras e estudos em geral da Linguagem C para desenvolvimento de aplicações diversas.

Curso EDX/Dartmouth College (DartmouthX), IMT (IMTx) - C Programming with Linux

Minhas anotações sobre os cursos:

História

  • Clássico 'Olá Mundo'
    • Programa que mostra na tela a frase: Olá Mundo
    • Usado para facilitar o aprendizado e entendimento básico das particularidades das linguagens de programação.
    • Foi inventado pelo cientista da computação canadense: Brian Kernighan
    • Nos laboratórios Bell com os criadores da linguagem C: Ken Thompson e Dennis Ritchie.
  • Linguagem de programação C de Brian Kernighan e Dennis Ritchie de 1978
    • Curiosamente tem como texto inicial:
"The only way to learn a new programming language is to write programs with it! 
 The first program to write is the same for all languages, display the two words hello world."
  • No próprio livro ele também confessa que executar o programa
  • é muito mais difícil do que o esperado.
    • É necessário criar o código fonte em algum editor de texto
    • Compilá-lo corretamente
    • Carregá-lo devidamente na memória
    • Executá-lo
    • E encontrar aonde o resultado foi mostrado.
  • Este curso desenvolveu uma ferramenta que permite fazer todas estas etapas via browser afim de facilitar ainda mais o acesso ao aprendizado

Palavras reservadas

  • Anotações/lembretes de cada instrução reservada da Linguagem C

if

  • Em C a expressão a ser validada pela referida instrução será:
    • Falsa - se a expressão resultar em 0 ou 0.0
    • Verdadeira - Qualquer coisa
      • diferente de zero
      • indiferente se positivo ou negativo
  • O resultado de expressões lógicas (que usam operadores comparativos)
  • podem ser armazenadas em uma variável
    • Os valores possíveis de resultado destas expressãos são:
      • 0 (inteiro) - Falso
      • 1 (inteiro) - Verdadeiro
   resultado = a>b;
   // ou
   resultado = (a>b);
   // nesse caso os parenteses são usados apenas para legibilidade
  • Operadores comparativos com pontos flutuantes
    • É necessário atentar a precisão dos valores do tipo ponto flutuante
      • para que se obtenha o resultado desejado na comparação.
    • No ambiente de desenvolvimento do curso
      • a precisão do lado decimal era de 14 dígitos
      • Após isso os operadores passavam a dar resultados inesperados
  double a = 5.0000000000000001;
  double b = 5.0000000000000000;
  
  // a == b - resultado é 1, pois a precisão está em 15 dígitos

for

  • o primeiro argumento da instrução for
    • é a definição e atribuição de uma variavél
    • usada como um contador de lações/interações
  • Na Linguagem C ANSI (C89) - (tenho que confirmar)
    • isto não é permitido, apenas a partir do C99
    • Nesta versão é necessário definir a variável fora do escopo da instrução for
    • E apenas no primeiro argumento pode-se utilizar para atribuição

scanf

  • Por padrão, scanf usa espaços em branco como delimitador de leitura de entrada de dados
    • Dependendo claro do tipo de dado que definido e esperado na leitura
  • Mas é possível usar outros delimitadores como a ,
    • basta que no argumento string de formatação do scanf use-a como delimitador
  • A única exceção desse delimitador padrão (espaços em branco) pode não funcionar é quando o tipo de dado esperado na leitura é do tipo char
    • Nesse caso o espaço em branco pode ser entendido como um caractere a ser lido e não delimitador.
    • Para evitar este possível erro é necessário formatar adequadamente a string de leitura do scanf

printf

  • Para valores ponto flutuante (números reais, tipo de dado double), o padrão de impressão são o total de 6 dígitos de precisão.
    • Quando usado o formatador %lf

Arrays

  • Inicialização de arrays
    • Arrays de tamanho fixo podem ser explicitamente inicializados.
  int array[5] = {1,2,3,4,5};
  ou
  int array[5] = {0};
  • Se houver menos elementos inicializadores, os elementos remanescentes serão inicializados com o valor informado.
    • falta testar o que acontece, se houver elementos como {0,1}, como fica o preenchimento do restante? - preciso montar ambiente pra testar

Strings

  • Em C são array de caracteres
    • Logo, a forma de inicialização que me foi recomendada para array de caracteres:
  char string[10] = {'\0'};
  • A explicação está na seção anterior
  • Existe formatador específico para leitura (e impressão) de strings: %s
    • Ele possui a vantagem de incluir ao final o terminador nulo de strings: \0
    • O único cuidado a ser tomado é durante definição do array de caracteres
      • Deve-se sempre somar +1 ao número esperado de caracteres, afim de permitir a inclusão do caracter terminador \0
  • Para saber o tamanho da string atribuída ao array
    • (sem poder usar o strlen)
    • é apena via laço percorrendo o array
      • contando cada caracter até encontrar o terminador nulo (\0)
  • sizeof - contabiliza a capacidade do tipo de dado da referida variável
    • no caso de array de caracteres, contabilizara o tamanho máximo do array

Funções

  • Na chamada da função
    • têm-se argumentos (pois não há tipificação de dados)
  • No protótipo (declaração) da função
    • têm-se parâmetros ( tipificação de dados)
    • Conforme resposta de instrutor do curso:
      • O prótotipo da função corresponde a declaração da função, não sua definição.
      • Esta declaração deve explicitar o tipo de parâmetros ou na sua ausência a palavra reservada void
    • O protótipo é declarado antes da função main
    • E a definição do corpo da função recomenda-se ser após a função main

Arquitetura de Computadores

  • Para uso do verdadeiro poder da Linguagem C é necessário entendimento razoável
  • do funcionamento da arquitetura de um computador
    • De preferência na arquitetura na qual se destina o desenvolvimento

História

  • Anotações retiradas e resumidas do curso da EDX
  • John von Neumann - ★ 1903, Budapeste - Hungria.
    • Físico
    • Matemático
    • Participou de grupo que criou o modelo
      • que descreve o que há internamente em um coputador
  • A arquitetura von Neumann
    • é usada em todos os computadores modernos
    • há controvérsia por uso deste nome para a arquitetura.
  • John William Mauchly e John Eckert
    • Usaram este conceito já em seu trabalho com o computador ENIAC
  • Os conceitos descritos abaixo tratam sobre a arquitetura de Princeton
    • Que serve de tributo a todos estes participantes que tornaram isso possível
    • e também para satisfação da maioria
  • Muito dos computadores concebidos entre a década de 40 e 70
    • usam este modelo abaixo
  • Apenas após a década de 70 novas idéias surgiram

Fundamentos

  • A arquitetura de computador é um modelo abstrato
    • que divide o computador em 4 partes distintas

farm8.staticflickr.com_7851_32814033088_f0c0cc29d4.jpg

Unidade Lógica Aritmética

  • ou Arithmetic Logic Unit - ALU
    • Executa operações básica
      • soma
      • subtração
      • multiplicação
      • divisão
      • operações lógicas
        • E
        • OU
        • NÃO

Unidade de Controle

  • ou Control Unit
    • Coordena a operação e sequência
      • de movimentação de dados entre as outras partes da arquitetura

CPU

  • Central Processing Unit do computador
    • Unidade Processamento Central - UPC
  • É a únião da
    • Unidade de Controle e
    • Unidade Lógica Aritmética

Entrada e Saída

  • I/O - Input and Output
    • Permite a comunicação entre o computador e o mundo externo
      • Periféricos em geral
      • Outros computadores

Memória

  • Este último elemento do modelo abstrato de arquitetura
    • Refere-se ao hardware do computador que destina-se
    • em armazenar informação para uso do computador
    • É usada tanto pelos dados como por programas/aplicações
  • Divide-se em:
  • Memória principal
    • RAM - Random Access Memory
      • De fácil e rápido acesso
        • Utilizada para execução de programas
      • Também conhecida como memória de armazenamento volátil
    • ROM - Read Only Memory
  • Memória secundária
    • Destinada ao armazenamento de dados
    • Discos rígidos (Hard Drives)
    • CD/DVD
    • cartões de memória etc

Random Access Memory - RAM

  • Pode ser representada como
    • uma sequência de células binárias
    • cada uma sendo preenchida com 0 ou 1
      • uma única célula sendo chamada de 1 bit
  • Agrupando um conjunto destas células
    • cria-se o que é chamado de palavra (word)
      • É a unidade fundamental do dado
      • Podendo ser movida entre a memória RAM
      • e o processador
  • O tamanho de uma palavra é expressada
    • em números de bits
      • que corresponde ao número de células
    • ou em bytes
      • sendo um 1 byte = 8 bits
  • Computadores e processadores modernos
    • para formar uma palavra usam tamanhos de:
      • 8
      • 16
      • 32
      • e até 64 bits
      • outros tamanhos, além desses, também são permitido
  • Estes tamanhos em particular se destacaram históricamente
    • em decorrência do resultado da evolução da arquitetura de computadores
    • mas também evoluiram com o tempo
  • O agrupamento das células da memória para formação de palavras
    • permite o endereçamento de cada palavra formada
    • também conhecido como endereçamento de memória
  • O endereço de computador é um número descritivo
    • do local da palavra na memória do computador
  • Abaixo uma ilustração retirada do curso da EDX visando ilustrar o texto acima
    • Mostra o hardware memória
    • as células de memória
    • o agrupamento das células
    • a formação de uma palavra
      • em mais um de tamanho
    • a formação de uma palavra exemplo no tamanho de 8 bits
    • e por fim o endereçamento dado a cada uma das palavras
  • A programação na Linguagem C permite o acesso a estes endereçamentos da memória
    • O uso destes endereçamentos provê um acesso ao computador do tipo baixo nível
      • por acessar diretamente a memória do computador
      • é possível literalmente mover-se na memória do computador de palavra a palavra
  • É uma técnica otimizada de uso da memória
    • que é tanto precisa
    • ou de performance
      • relativo a velocidade da execução
  • Recurso tal, extremamente valioso para os desenvolvedores
    • Pois cada variável
      • possui seu próprio endereço na memória
      • que é composto por bits (células)
      • que são organizados em palavras

Ponteiros

  • Relativo a armazenamento, os ponteiros em :
    • Sistemas 32 bits utilizam 4 bytes
    • Sistemas 64 bits utilizam 8 bytes
  • Para impressão em tela, usa-se o formatador especial %p
© 2019 por Samuel