Ambiente de desenvolvimento
• Um programa em C passa por seis fases até a execução:
1) Edição 2) Pré-processamento 3) Compilação 4) Linking 5) Carregamento 6) Execução
Etapa 1: Criação do programa no editor Etapa 2: Manipulação do código pelo pré-processador
Etapa 3: Criação do código objeto pelo compilador e armazenamento em disco Etapa 4: Conecta o código objeto com as bibliotecas, criando um executável e o armazena no disco
Etapa 5: Traz o arquivo do disco para a memória
Etapa 6: CPU pega cada instrução e a
executa, armazenando novos valores como conforme a execução do programa
Edição
• Realizada pelo programador no editor do ambiente de desenvolvimento
• O programa é armazenado em um dispositivo de armazenamento secundário (disco rígido) com extensão .c
Pré-processamento e compilação
• A seguir, o programador emite o comando para compilar o programa • O compilador traduz o programa em C para a linguagem de máquina
(também chamado de código-objeto)
• Antes da tradução começar, o compilador aciona automaticamente o programa pré-processador
• O pré-processador obedece a comandos especiais chamados de diretivas de pré-processador, que indicam a realização de
manipulações no programa
• Inclusão de outros arquivos
Linking
• Programas em C normalmente contêm referências a funções definidas em bibliotecas
• Assim, o código-objeto produzido pelo compilador C contém lacunas devido à falta dessas funções
• Um linker faz a ligação do código-objeto com o código das funções que estão faltando para produzir uma imagem executável (sem lacunas)
• Se o programa for compilado e linkado corretamente, será produzido um arquivo executável do código inicial
Carregamento e execução
• Antes que possa ser executado pela primeira vez, o programa deve ser colocado na memória
• Isto é feito pelo carregador (rotina de carga ou loader), que apanha a imagem executável do disco e a transfere para a memória
• Finalmente, a CPU executa as instruções do programa, uma após a outra
Dispositivos de entrada e saída
• Determinadas funções do C recebem seus dados de entrada a partir do stdin (o dispositivo padrão de entrada, ou standard input device) que normalmente é definido como o teclado.
• Os resultados são enviados para o stdout (o dispositivo padrão de saída, ou standard output device), que normalmente é a tela do
computador.
• Há também um dispositivo padrão de erro (standard error device) chamado stderr. Este dispositivo é usado para exibir mensagens de
Dispositivos de entrada e saída
• Determinadas funções do C recebem seus dados de entrada a partir do stdin (o dispositivo padrão de entrada, ou standard input device) que normalmente é definido como o teclado.
• Os resultados são enviados para o stdout (o dispositivo padrão de saída, ou standard output device), que normalmente é a tela do
computador.
• Há também um dispositivo padrão de erro (standard error device) chamado stderr. Este dispositivo é usado para exibir mensagens de
Impressão de linha de texto
• Comentários
– Texto rodeado por /* e */ é ignorado pelo computador – Usado para documentar e descrever o programa
• #include <stdio.h>
– Diretiva de pré-processamento
• Diz para o computador carregar o conteúdo de um determinado arquivo
– <stdio.h> habilita as operações de entrada e saída padrão
• int main()
– Qualquer programa em C deve conter uma função main (principal) – Ela indica o início da execução do programa
– Parentêses () indicam uma função
– int significa que essa função retornará um valor inteiro – Chaves { e } indicam um bloco
Impressão de linha de texto
• printf( "Bem-vindo ao C!\n" );
– Instrui o computador a realizar uma ação
• Qualquer instrução deve terminar com um ponto e vírgula ;
– Imprime a mensagem contida dentro das aspas" " – Caractere de escape (\ )
• o caractere \n indica que printf deve fazer algo fora do padrão
• Chave direita }
– Indica o fim de main
• Linker
– Quando uma função é chamada, o linker a localiza na biblioteca e a vincula no código-objeto
– Se o nome da função estiver erradon, o linker produzirá um erro porque ele não será capaz de encontrar a função na biblioteca
Somando dois inteiros
• int numero1; • int numero2; • int soma;
– Declaração de variáveis
Variável: local na memória onde um valor pode ser armazenado – int - palavra-chave reservada (tipo de dados)
– Variáveis podem assumir valores inteiros ( -1 , 3 , 0 , 47 )
Devem ser declaradas antes de serem utilizadas em uma instrução
• Se uma instrução fizer referência a uma variável não declarada, será produzido um erro de sintaxe – compilador não reconhece a instrução
– Nomes de variável (identificadores)
• Aceita letras, dígitos (não pode começar com um dígito) e sublinhados ( _ ) • Sensível a maiúsculas e minúsculas
• Pode ter qualquer comprimento, porém a linguagem C reconhece apenas os 31
Somando dois inteiros
• scanf( "%d", &numero1 );
– Função definida na biblioteca padrão stdio.h
scanf recebe a entrada do dispositivo padrão (teclado normalmente)
– A função scanf possui dois argumentos:
• %d – especificador de conversão - indica o tipo de dado aceito (d - inteiro do sistema decimal)
• & - operador de endereço
• &numero1 – indica o endereço na memória atribuído à numero1
Somando dois inteiros
= operador de atribuição– Atribui um valor a uma variável
– Variável posicionada à esquerda do operador recebe o valor Soma = numero1 + numero2;
Calcula a adição das variáveis numero1 e numero2 e atribui o resultado à variável soma usando o operador de atribuição
– A instrução é lida como: soma recebe o valor de numero1+numero2
printf( "Soma é %d\n", soma );
– Função definida na biblioteca padrão stdio.h
– apresenta a saída no dispositivo padrão (tela normalmente) – printf possui dois argumentos:
• String de controle de formato (" ")
• %d – especificador de conversão - indica o tipo de dado impresso • soma especifica o valor que será impresso
Variáveis e memória
• Variáveis
– Nomes de variáveis correspondem à posições na memória do computador
– Cada variável tem um nome, um tipo e um valor
– A operação de gravação (através de scanf , por exemplo) substitui e destrói o valor anterior
– A operação de leitura não modifica o valor armazenado na variável
• Uma representação visual
numero1
numero2
Aritmética em C
– Utilize * para multiplicação e / para divisão
– Divisão de número inteiros gera um resultado inteiro (truncamento)
• 7 / 4 resulta 1 • 17 / 5 resulta 3
– Operador % retorna o resto
• 7 % 4 resulta 3 • 17 % 5 resulta 2
Precedência de operadores
– Ordem que C utiliza para avaliar expressões – Alguns operadores atuam antes de outros – * e / antes de + e-– Avaliados da esquerda para a direita
Use parênteses quando for necessário forçar a precedência – Exemplo: calcular a média das variáveis a , b e c
Use: (a + b + c ) / 3 Não use: a + b + c / 3
– Parênteses aninhados : de dentro pra fora ((a + b) + c )
Tomada de decisão
• Instruções realizam ações (cálculos, entrada/saída de dados) ou
tomam decisões
• Estrutura if
• Toma decisões com base em uma condição
• Condição satisfeita – as instruções no corpo de if são executadas • Condição não satisfeita – instrução não é executada
• Independentemente do resultado, execução prossegue para o próximo passo
Operadores relacionais
Álgebra C Exemplo em C Significado
= == x == y x é igual a y ≠ != x != y x não é igual a y > > x > y x é maior que y < < x < y x é menor que y ≥ >= x >= y x é maior ou igual a y ≤ <= x <= y x é menor ou igual a y