.. | ||
README.org | ||
salve.c |
Curso Básico da Linguagem C
- Aula 1: História
Aula 1: História
Resumo do vídeo…
- Ken Thompson cria a linguagem B (1969) para ter uma linguagem de alto nível para reescrever o UNIX.
- Dennis Ritchie continua aprimorando a linguagem B.
- Em 1972, a linguagem B está tão diferente que recebe o nome de linguagem C.
- Em 1978, Brian Kernighan e Dennis Ritchie lançam o livro: The C Programming Language, que acaba se tornando a primeira especificação da linguagem.
- Entre 1983 e 1989, são escritas as primeiras especificações ANSI (ISO/IEC) para a linguagem.
- Os racunhos de 1987 (C87) são utilizados para escrever a segunda edição do livro, com o nome de The ANSI C Programming Language.
Conceitos abordados na aula…
O que é um programa de computador?
Um programa pode ser entendido como uma forma de manipular dados através de instruções para a realização de alguma tarefa.
O que é linguagem de máquina?
A linguagem de máquina (ou código de máquina) é o conjunto de códigos numéricos binários (numeração de base 2) que, transformados em sinais elétricos, irão acionar as operações implementadas na CPU do computador (OpCodes).
O que é uma linguagem de programação?
Uma linguagem de programação é um conjunto de especificações e regras que definem uma forma de escrever programas sem recorrer à escrita direta em código de máquina.
O que são linguagens de baixo e alto nível?
Toda linguagem de programação oferece algum grau de abstração (redução de complexidades) em relação à escrita do código de máquina (que é a única linguagem que a CPU do computador é capaz de interpretar).
A linguagem Assembly, uma linguagem de baixo nível, oferece basicamente um conjunto de mnemônicos para facilitar a escrita de instruções da CPU (OpCodes) e algumas macros e pseudo-instruções para orientar a montagem do arquivo binário do programa.
Exemplo de programa em Assembly (NASM x86_64) que não faz nada e sai com estado
de término 42
.
section .text
global _start ; Ponto de entrada do programa
_start:
; Convenção da chamada de sistema 'exit'
mov rax, 60 ; Passar o número da chamada de sistema (60 = exit) para RAX.
mov rdi, 42 ; Passar o valor do estado de término (42) para RDI
syscall ; Chamar o kernel
A linguagem C, por sua vez, abstrai procedimentos completos (rotinas) na forma de palavras-chave, funções da biblioteca padrão, estruturas e construções de linguagem, o que faz dela uma linguagem de alto nível.
Exemplo de programa em C que não faz nada e sai com estado de término 42
.
// Ponto de entrada do programa (função 'main')...
int main(void) {
return 42; // Terminar a função retornando o valor 42...
}
O que é compilação?
Compilação é o processo de traduzir um código escrito em uma linguagem de alto nível (por exemplo, C) para uma linguagem de montagem (por exemplo, Assembly).
O que são implementações?
Toda linguagem de programação precisa ser implementada conforme suas especificações.
Linguagens compiladas, por exemplo, são implementadas através dos seus compiladores, enquanto as linguagens interpretadas são implementadas nos seus interpretadores.
No caso da linguagem C, as especificações são implementadas na forma de um
compilador (cc
, nos Unix, e gcc
, no Projeto GNU) e de uma biblioteca padrão
(libc
, nos Unix, e glibc
, no Projeto GNU).
O que são arquiteturas orientadas a palavras?
São sistemas computacionais que utilizam quantidades arbitrárias de bits como unidade de tamanho de dados. Exemplo: o PDP-7 utilizava palavras de 18 bits.
O que são arquiteturas orientadas a bytes?
São sistemas computacionais que utilizam múltiplos de bytes (8 bits) para
definir tamanhos de dados. Exemplo: a arquitetura x86_64 utiliza palavras de
2 bytes, o que corresponde ao tipo short int
na linguagem C.
Características da linguagem C…
- Linguagem compilada
- De alto nível
- De uso geral
- Imperativa
- Procedural
- Estruturada
Implementação GNU/Linux…
Compilador:
- GNU Compiler Collection (
gcc
)
Biblioteca C Padrão:
- GNU Libc (
glibc
)
Obter a especificação padrão do gcc…
:~$ gcc -E -dM -x c /dev/null | grep '__STDC_VERSION__' #define __STDC_VERSION__ 201710L
-E
: Para a compilação após gerar o código pré-processado.-dM
: Filtra todas as diretivas que definem macros.-x c
: Especifica a linguagem (no caso,c
)./dev/null
: Compilar o arquivo vazio/dev/null
.
Compilação…
Transformação do código-fonte em texto do programa para um código binário em linguagem de máquina.
Etapas:
1 - Pré-processamento:
gcc -E arquivo.c → Saída padrão
2 - Compilação:
gcc -S arquivo.c → arquivo.s (fonte em assembly)
3 - Montagem:
gcc -c arquivo.c → arquivo.o (objeto binário)
4 - Link-edição:
gcc arquivo.c → a.out (arquivo binário executável)
Exemplo de um programa em C…
Programa salve.c
:
#include <stdio.h>
int main(void) {
puts("Salve, simpatia!");
return 0;
}
Compilação:
:~/git/cblc/aulas/01-historia$ gcc -o salve salve.c
Execução:
:~/git/cblc/aulas/01-historia$ ./salve Salve, simpatia!