G++

De GNU C++ Compiler

g++ is de GNU C++ Compiler en is een onderdeel van de GNU Compiler Collection.

Omdat compilers een zeer specifieke doekgroep hebben, ga ik deze tool maar vluchtig beschrijven. Als je wil leren programmeren in één of meerdere van deze talen, dan zal het gebruik van een compiler daar in meer detail besproken worden.

C en C++ Worden nog veel gebruikt op Linux, zo is de kernel geschreven in C en vele andere toepassingen in C++

C++ Is in ontwikkeling sinds 1979 toen Bjarne Stroustrup het ontwikkelde toen hij werkte bij AT&T Bell Labs en had in het begin de naam C With Classes omdat het een uitbrijding was op C van Dennis Ritchie en Brian Kernighan (1972) die toen ook werkte voor AT&T Bell Labs.

Om de werking van de compiler te kunnen tonen hebben we natuurlijk wat broncode nodig, hiervoor gaan we de standaard "Hello World" code gebruiken.

Maak een bestand met de naam hello.cpp met de volgende inhoud.

#include <iostream>

int main()
{
    // toon de tekst tussen de aanhalingstekens.
    std::cout << "Hallo Commandoregel!" << std::endl;
   return 0; 
}

De simpelste methode om dit te compileren is g++ hello.cpp

Als er geen fouten in de broncode zitten dan geeft dit een uitvoerbaar bestand met de naam a.out.

als we a.out uitvoeren zal het programma de regel "Hallo Commandoregel!" weergeven.

Figuur 1. $ ./a.out
$ ./a.out

Maar omdat a.out nogal cryptisch is geven we met de -o parameter aan welke naam we het programma willen geven. Ook wordt er vaak de -Wall parameter meegegeven (dit betekend dat alle waarschuwingen worden weergegeven tijdens het compileren). Dit kunnen fouten zijn in de code waardoor het programma niet wil compileren of waarschuwing die heen invloed hebben op het compileren van de software, maar welke aangeven dat er mogelijk fouten in de broncode zitten.

Figuur 2. vi hello.cpp
vi hello.c

Hierboven kunnen we zien dat ik een integer met waarde 42 heb toegevoegd, maar deze integer (met naam a) wordt nergens gebruikt. Hoewel het programma zal compileren geeft gcc een melding dat deze niet gebruikt wordt.

Figuur 2. $ g++ -Wall hello.cpp -oHello
$ gpp -Wall hello.cpp -oHello

Het programma wordt echter wel gecompileerd en zal (in dit geval) ook correct werken.

Figuur 2. $ ./Hello
$ ./Hello

C++ Kunnen we opsplitsen in C++ en Modern C++, Modern C++ behelst de versies van C++ sinds 2011 (ook bekend als C++11). Hoewel C++ Al heel lang bestaat wordt het nog regelmatig aangepast, zo wordt er om de 3 jaar een nieuwe standaard uitgegeven. De standaard op het moment van het schrijven van dit artikel is C++17 (uitgegeven in 2017) en de volgende versie wordt C++20.

Omdat C++ nog zoveel evolueert is het mogelijk dat niet alle functies van de nieuwere standaard werken met iedere compiler. Je moet dus eerst kijken of jouw compiler deze versie al-dan-niet ondersteund.

Om een voorbeeld te geven: De volgende code werkt sinds C++ 17:
switch (antwoord)
{
    case 42:
    std::cout << "Het antwoord is correct!" << std::endl;
    [[fallthrough]];    // NIEUW IN C++17
    case 40:
    //code
    break;
    default:
    break;
}

De [[fallthrough]] statement is nieuw en werkt enkel met C++17 en nieuwer.

Als je een specifieke standaard wil opgeven om te gebruiken bij het compileren van de software, kun je de -std=c++17 parameter meegeven (of een andere versie). G++ versie 9 ondersteund ook C++20, maar hiervoor heb je de parameter -std=c++2a nodig!

Omdat compilers zeer complex zijn en een lange lijst van opties hebben is het onmogelijk om deze hier allemaal te bespreken. Wil je meer weten over programmeren of over een bepaalde compiler plaats dan een bericht op ons forum en we zullen proberen om jouw vraag daar te beantwoorden.

Meer informatie kun je altijd terugvinden in de manpages of de infopages