Includes, funcions i main. El main llegeix les dades, crida les funcions i escriu el resultat. Els paràmetres van per valor (còpia), per & (l’original) o per const& (l’original, sense poder-lo canviar).
diff <sortida> <esperada> (si no escriu res, són iguals)
La segona comanda només si la primera va bé
<comanda> && <comanda>
Empaquetar
Què vols
Comanda
Fer un .tar amb uns fitxers
tar cf <paquet.tar> <fitxers>
Fer un .tar amb tota la carpeta
tar cf <paquet.tar> *
Extreure un .tar
tar xf <paquet.tar>
Makefile
Per a un programa amb main.cc i una classe (classe.hh i classe.cc), on tots dos .cc inclouen classe.hh:
# VariablesCXX = g++OPCIONS = -g3 -D_GLIBCXX_DEBUG -Wall -Wextra -Werror -Wno-sign-compare -std=c++17 -fno-extended-identifiers# Primera regla: el que fa «make» solall: main.exe# L'executable: enllaça tots els .omain.exe: main.o classe.o $(CXX) $(OPCIONS) -o main.exe main.o classe.o# Un .o per a cada .cc, que depèn del .cc i dels .hh que incloumain.o: main.cc classe.hh $(CXX) $(OPCIONS) -c main.ccclasse.o: classe.cc classe.hh $(CXX) $(OPCIONS) -c classe.cc# Esborra el que s'ha generatclean: rm -f *.o *.exe.PHONY: all clean
Alerta: les comandes de cada regla comencen amb un tabulador, no amb espais.
Comanda
Què fa
make
Fa el primer objectiu (all).
make <objectiu>
Fa només aquest objectiu (i el que en depèn).
make clean
Esborra el que s’ha generat.
make -n
Escriu les comandes que faria, sense executar-les.
Errors habituals
Provar un executable vell. Has canviat el .cc i no has recompilat: estàs provant el programa d’abans. Compila i prova amb &&, o fes servir make.
> cap al fitxer d’entrada../prog.exe > prog.in buida les dades abans de llegir-les.
Falta l’#include.'cout' was not declared in this scope: posa l’#include i el using namespace std;.
Vector per valor. Si la funció l’havia de modificar, passa’l per &. Per valor, canvies una còpia.
getline just després de cin >>. Hi queda el salt de línia: llença’l amb cin.ignore(1000, '\n');.
Espais en lloc del tabulador al Makefile.missing separator.
Un .hh que falta a les dependències.make no refà el .o quan canvies la classe, i el programa fa coses estranyes.