Conteúdos da cadeira

C estruturado e ferramentas

De C++ para C, módulos com cabeçalhos, Makefile, Git e Doxygen no Minix.

Markdown

Perguntar sobre esta página

ChatGPTClaudePerplexityGeminiCopiar e abrir

Envia o link e pede à IA para ler a página. No Gemini, cola a pergunta copiada.

Ver pergunta para copiar
Nesta página

Em LC programas em C, não em C++. Desaparecem as classes, as referências, o new e o iostream. Em troca ganhas controlo direto sobre a memória e um conjunto pequeno de ferramentas que vais usar em todos os trabalhos: o compilador cc (CLANG), o make, o ar para bibliotecas, o Git e o Doxygen para documentar. Esta página faz a tradução e monta o posto de trabalho.

De C++ para C

As diferenças que vais sentir na primeira semana:

  • Sem classes: dados e funções vivem separados. Onde tinhas um objeto com métodos, tens agora uma struct mais funções que a recebem por apontador.
  • Sem new e delete: a alocação dinâmica faz-se com malloc e free da stdlib.h, e a memória continua a ser problema teu.
  • Sem iostream: entrada e saída com printf e scanf da stdio.h, com formatos explícitos (%d, %x, %c).
  • Sem referências e sem sobrecarga: passagem por valor ou por apontador, e cada função tem um nome único.

O resto do C++ que conheces (apontadores, struct, controlo de fluxo, aritmética de bits) transfere-se sem mudanças. Se os apontadores ainda tremem, revê-os antes de tocares em registos de hardware.

Módulos com cabeçalhos

Um módulo é um par de ficheiros: o cabeçalho .h declara o que o módulo oferece, o .c implementa. Quem usa o módulo inclui só o .h:

/* timer.h */
#ifndef TIMER_H
#define TIMER_H

int timer_set_frequency(unsigned long freq);
int timer_subscribe_int(void);

#endif

A guarda #ifndef impede inclusões duplas: sem ela, dois #include do mesmo cabeçalho duplicam as declarações e a compilação parte. Cada .c inclui o seu .h primeiro e depois as bibliotecas de que precisa. Esta disciplina parece burocracia até ao dia em que o projeto tem seis periféricos e cada um vive no seu módulo.

Compilar com um Makefile

Compilar à mão cada ficheiro com o cc funciona uma vez. À segunda, escreve um Makefile que diga como construir cada objeto e como os ligar:

CC = cc
CFLAGS = -Wall -Wextra

proj: main.o timer.o kbd.o
	$(CC) $(CFLAGS) -o proj main.o timer.o kbd.o

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f *.o proj

As linhas de receita começam obrigatoriamente por tabulação, não por espaços: é o erro mais clássico do primeiro Makefile. Com isto, make recompila só o que mudou e make clean limpa os objetos.

Git e Doxygen

Cada trabalho vive num repositório Git: add e commit frequentes com mensagens que descrevam o estado (por exemplo “teclado: polling a ler scancodes”), um status antes de cada commit para confirmar o que entra. Quando trabalhares em grupo, pull antes de começar e push ao acabar.

A documentação escreve-se no próprio código em formato Doxygen, com /** ... */ antes de cada função pública a explicar parâmetros e retorno. Gerar a documentação passa a ser um comando, não um relatório escrito à parte no fim do semestre.

Ver o ficheiro no GitHub

À tua maneira

Escolhe como preferes ler.

Aparência
Ajustar cores e largura
Cor de destaque do tema FEUP
Tipo de letra

Álgebra, lógica e uma ideia de cada vez.

As tuas escolhas ficam guardadas neste navegador.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.