Hallo Wereld

het "verplichte" Hello World programma

Iedere cursus programmeren begint met het schrijven van het meest simpele programma mogelijk, dat ook nog iets doet.

Dit is het "Hallo Wereld" (of "Hello World!') programma.

Het enige wat dit programma doet is het weergeven van de tekst "Hallo Wereld!" op de commandoregel

hallowereld.cpp:
import <iostream>;

int main()
{
    std::cout << "Hallo Wereld!" << std::endl;
    return 0;
}
Note: Om dit programma te kunnen compileren hebben we op dit moment en nog niet uitgegeven versie van de gcc (GNU Compiler Collection) nodig1. Met name de volgende snapshot: gcc-11-20201227.tar.xz nodig. Deze kun je downloaden vanaf een van de mirror servers van het gcc project

kijk hier voor installatie instructies voor gcc (broncode).

g++ -fmodules-ts -std=c++20 hallowereld.cpp -o hallowereld

Het argument -fmodules-ts is nodig om de modules ondersteuning van de compiler te activeren.

Het argument -std=c++20 geeft aan dat de compiler de C++20 compatibiliteit moet aanzetten, dit is voor dit voorbeeld niet nodig, maar het kan geen kwaad op dit voor de zekerheid erbij te zetten.

De uitvoer van dit commando is (momenteel) nogal teleurstellend:

In module imported at hallowereld.cpp:1:1:

/opt/gcc-11/include/c++/11.0.0/iostream: error: failed to read compiled module: No such file or directory

/opt/gcc-11/include/c++/11.0.0/iostream: note: compiled module file is ‘gcm.cache/./opt/gcc-11/include/c++/11.0.0/iostream.gcm’

/opt/gcc-11/include/c++/11.0.0/iostream: note: imports must be built before being imported

/opt/gcc-11/include/c++/11.0.0/iostream: fatal error: returning to the gate for a mechanical issue

compilation terminated.

De oorzaak van deze foutmelding is dat er geen module van iostream bestaat en daarom kan g++ deze ook niet vinden.

Om deze module te maken moeten we 2 dingen doen
  1. Kopiëer de iostream header naar de broncode directory van je programma (ik heb gcc-11 geïnstalleerd in /opt/gcc-11 dus moet ik het bestand kopiëren van /opt/gcc-11/include/c++/11.0.0/iostream
  2. De module compileren met het commando: g++ -fmodules-ts -std=c++20 -c -x c++-system-header iostream

Als alles goed verloopt zie je nu een directory met als naam gcm.cache en in een subdirectory van deze directory (gcm.cache/opt/gcc-11/include/c++/11.0.0) staat nu een bestand met naam iostream.gcm

Dit bestand kunnen we gewoon in deze directory laten staan, en als we nu (vanuit de directory waarin het broncode bestand staat) het commando: g++ -fmodules-ts -std=c++20 hallowereld.cpp -o hallowereld uitvoeren, zal het programma correct compileren.

Als we nu kijken staat er een uitvoerbaar bestand met als naam hallowereld en als we dit uitvoeren verschijnt de boodschap Hallo Wereld! op het scherm.

We hebben ons eerste C++ programma geschreven en uitgevoerd, én we zijn klaar om te werken met de nieuwe faciliteiten (zoals modules) die C++20 ons aanbied.

1 Ik maak zelf gebruik van gcc en ben niet op de hoogte van de mate van ondersteuning voor C++20 bij andere compilers zoals CLang en MSVC.