Installering

Denne beskrivelse er gjort så kort som mulig. For at det ikke skal blive en afhandling springer jeg derfor let hen over en masse(linkeren er fx ikke beskrevet, og de tekniske detaljer omkring konverteringen af assembly) er over.

Når vi skriver C++ kræver det lidt ekstra inden vores maskine kan læse koderne. Hvor installation af Python ikke kræver andet end en editor, som kan oversætte koden til computeren, så kræver C++ både en editor og en compiler.

Editoren skriver du koden i C++ i, mens compileren oversætter til maskinsprog. Strengt taget, kan du altså godt skrive C++ i en editor uden nogen compiler, men du vil ikke kunne se dine koder i C++ bliver eksekveret til et program.

En compiler er altså et program, som er skrevet til at forstå et programs syntaks, og lagrer de forskellige instruksioner rundt omkring i fx RAM og CPU.

C++ kalder man også for et high level sprog, mens compileren der oversætter i assembly sker i low level syntaks. Se derfor C++ som et lag over maskinsproget.

Hvor low level altså er et sprog, der langt bedre kan forstås af computeren, så er programmeringssprog i high level meget tættere på den menneskelige forståelse for sprog.

Når compileren har oversat koderne i C++ kan vi eksekvere vores program.

Et program som printer “Hello, Pythons!” ud, ville typisk have følgende “anatomy”. Tag dig ikke af, hvis linjerne ingen mening giver nu.

#include <iostream>

using namespace std;

int main()
    {
        cout << "Hello, Pythons!";
        return 0;
    }

Herefter vil man typisk bede ens editor om at compile programmet. Compileren oversætter linjerne i assembly. Når maskinens processor har modtaget disse instrukser, vil vi få vores program.

.LC0:
.string "Hello, Pythons!"
main:
push rbp
mov rbp, rsp
mov esi, OFFSET FLAT:.LC0
mov edi, OFFSET FLAT:_ZSt4cout
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
mov eax, 0
pop rbp
ret
__static_initialization_and_destruction_0(int, int):
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
cmp DWORD PTR [rbp-4], 1
jne .L5
cmp DWORD PTR [rbp-8], 65535
jne .L5
mov edi, OFFSET FLAT:_ZStL8__ioinit
call std::ios_base::Init::Init() [complete object constructor]
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:_ZStL8__ioinit
mov edi, OFFSET FLAT:_ZNSt8ios_base4InitD1Ev
call __cxa_atexit
.L5:
nop
leave
ret
_GLOBAL__sub_I_main:
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret

At skrive programmer i C++ kræver altså 2 ting: en editor og en compiler. Vi skal have en compiler for at se vores program, og det er ikke altid den følger med i en editor. Derudover er der mange forskellige compilere afhængigt af hvilke styresystemer vi bruger.

Windows, Mac og Linux.

Først og fremmest er det vigtigt at have en editor, som kan udfylde ens behov. Som sagt er det langt fra sikkert at denne editor kommer med en præinstalleret compiler.

Her er to gode bud på editorer som kommer med præ-installerede compilerer.

Dev C++: https://sourceforge.net/projects/orwelldevcpp/

Dev C++ var min allerførste compiler, og jeg bruger den stadig i dag. Den er genial til at skrive C++ i, fordi den arbejder langt hurtigere end alle de andre editorer(og her mener jeg alle editorer! også de store dyre enterprise løsninger). Dog er det relevant at iagttage, at Dev C++ ikke er blevet opdateret siden 2015. Det betyder bl.a. at compileren ikke er den nyeste nye. Den hedder tdm-gcc 4.9.2 mens den allerseneste tdm-gcc, i skrivende stund, er version 9.2.0.

Men i min optik er det komplet ligegyldigt i starten. Dev C++ gør som vi beder dem om. Vi skriver vores kode i c++, beder compileren oversætte programmet, og i løbet af ingen tid er vores program klar.

Geany: https://geany.org/

Geany er et open source projekt, som opdateres hyppigt, hvorfor compileren også er af nyere dato. Det er en editor som bruges meget, og det er især en fin editor til at starte med, da den let compiler C++ og bygger programmet. Den er ikke lige så hurtig som Dev C++, da der er flere trin man skal igennem inden programmet er færdigt. Men det er absolut en rigtig fin editor med en præ-installeret, hurtig, compiler. Det er ikke for ingenting, at mange fx bruger Geany i kode-konkurrencer.

Visual Studio Code: https://code.visualstudio.com/

Visual Studio Code er et fint supplement til de øvrige to, og editoren er langt mere brugervenlig og flot. Det fine ved den er, at man i langt højere grad selv er herrer over valg af compiler end ved de to øvrige. Og netop derfor er det vel også at mange virksomheder kan lide den. Men skal jeg være helt ærlig er den mere omstændig at compile med end både Geany og Dev C++. Benytter du Windows er det i øvrigt også lidt af et cirkus at få installeret compileren, da du først skal have hentet MingGW. Kast dig ikke ud i Visual Studio Code til at begynde med.

Online C++ Compiler: https://www.onlinegdb.com/online_c++_compiler

Online compiler som fungerer upåklageligt.