Kirjoittaja: Metabolix (2009 – 2024).
C++-ohjelmoinnin kannalta tärkein työkalu on kääntäjä ja siihen tiiviisti liittyvät esikääntäjä ja linkkeri. Kaksi yleistä vapaasti saatavilla olevaa C++-kääntäjää ovat GCC (g++) ja Clang (clang++), jotka ovat suurelta osin yhteensopivat. Näistä GCC:n käyttöä esitellään hieman jäljempänä.
Kääntäjää voi käyttää komentoriviltä suoraan tekstikomennoilla, tai sen voi liittää graafiseen kehitysympäristöön (IDE, Integrated Development Environment). Komentorivin käyttö on hyödyllinen taito mutta ei välttämätön.
Koodin kirjoittamiseen kannattaa lisäksi hankkia hyvä editori, joka osaa värittää varatut sanat ja muut tärkeät kohdat koodista ja auttaa koodin sisentämisessä. Lukuisat aivan tavalliset tekstieditorit ovat hyviä C++-editoreja, ja moniin on mahdollista lisätä valinta, joka käynnistää C++-kääntäjän ennalta määrätyllä komennolla.
Hyvä kehitysympäristö sisältää usein monia koodin kirjoittamista helpottavia ominaisuuksia. Näistä yleisimpiä ovat automaattinen täydennys, vinkit koodin virheistä sekä linkit koodin eri osiin ja ohjeisiin netissä. Omien tottumusten mukainen kehitysympäristö nopeuttaa ohjelmointia. Joitakin vaihtoehtoja mainitaan seuraavissa kappaleissa.
Eri Linux- ja BSD-versioissa ohjelmat on yleensä mahdollista asentaa jonkinlaisella paketinhallintatyökalulla. Ainakin GCC (g++) tai Clang (clang++) on varmasti saatavilla, joskus jopa valmiiksi asennettu. Usein myös jokin hyvä tekstieditori kuuluu perusvarustukseen. Hyviä ohjelmia koodin kirjoittamiseen ovat esimerkiksi kehitysympäristöt CodeLite, KDevelop, Eclipse ja Visual Studio Code sekä tekstieditorit Kate, Geany, Emacs ja Vim. Myös mikä tahansa muu mieluisa tekstieditori käy; käännöskomennon voi aivan hyvin kirjoittaa myös komentoriville eli konsoliin tai terminaaliin.
Mac OS X:n mukana tulevat GCC (ja g++) sekä kehitysympäristö nimeltä Xcode. Macin komentorivi eli Pääte (Terminal) toimii kuten Linuxin komentorivi, ja GCC:llä ohjelmat käännetään samalla tavalla. Xcodea voi käyttää sekä tekstieditorina että kehitysympäristönä, ja sen käytöstä voi lukea lisää sen omista ohjeista tai Apple Developer -sivustolta. Maciin voi asentaa myös muita kehitysympäristöjä; esimerkiksi CodeLite ja Eclipse toimivat Mac OS X:ssä.
Windowsissa nopein ratkaisu on asentaa kehitysympäristö, jonka mukana tulee kääntäjä. Vaihtoehtoja ovat esimerkiksi avoimen lähdekoodin Code::Blocks ja GCC (MinGW) tai Microsoftin ilmainen mutta rekisteröitymisen vaativa Visual Studio Community.
Pidemmän päälle joustavampi vaihtoehto on erillinen kääntäjä ja kehitysympäristö, siis vastaava järjestely kuin Linuxissa ja Macissa. Kääntäjän asentamiseen hyvä ja helppo tapa on MSYS2-ympäristö, joka esitellään seuraavaksi. Kääntäjän asentamisen jälkeen voi valita erikseen kehitysympäristön, joita on listattu vielä jäljempänä.
Kääntäjä (GCC, Mingw-w64) on helpointa asentaa MSYS2-ympäristön osana.
Kun MSYS2 on asennettu, tulee käynnistää MSYS2 UCRT64 -komentorivi. (Erinimisten ympäristöjen syistä ja eroista voi lukea MSYS2:n sivuilta.)
Aukeava komentorivi muistuttaa toiminnaltaan Linuxin komentoriviä. Kansioiden välimerkkinä on "/
" eikä "\
". Tutut Windowsin kansiot löytyvät sijainnista /c/Users/Käyttäjänimi
. Kun komentorivillä painaa pari kertaa tabulaattoria, komentorivi tarjoaa ehdotuksia (kuten tiedostonimiä) keskeneräisen komennon jatkoksi.
Komentorivillä voi päivittää järjestelmän ja kaikki asennetut paketit, asentaa työkaluja sekä etsiä ja asentaa yleisimpiä kirjastoja:
# Päivitetään: pacman -Syu # Asennetaan kääntäjä ja siihen liittyviä työkaluja (CMake, Make): pacman -S mingw-w64-ucrt-x86_64-toolchain pacman -S mingw-w64-ucrt-x86_64-cmake pacman -S make # Esimerkki: Etsitään ucrt-ympäristöön sopivat SDL-paketit, asennetaan SDL2. pacman -Ss ucrt SDL pacman -S mingw-w64-ucrt-x86_64-SDL2
Kääntäjän sijainti näin asennettuna on C:\msys64\ucrt64\bin
. Tätä tietoa saattaa tarvita myöhemmin kehitysympäristöjä asentaessa.
Kun kääntäjä on asennettu, sitä voi helposti käyttää MSYS2 UCRT64 -komentorivillä. Seuraavaksi siirrytään työpöydälle, tehdään uusi kansio, tehdään kooditiedosto ja käännetään se.
# Siirrytään työpöydälle. cd /c/Users/Käyttäjänimi/Desktop # Luodaan kansio cpp-testi ja siirrytään siihen. mkdir cpp-testi cd cpp-testi # Avataan kooditiedosto main.cpp tekstieditorissa. start notepad main.cpp
Nyt kooditiedostoon voi tallentaa vaikka opassarjan esimerkkiohjelman.
Sitten käännetään koodi komentorivillä:
g++ -Wall main.cpp
Jos ei näy virheilmoitusta, koodi on käännetty ja tuloksena on ohjelma a.exe
, jonka voi nyt käynnistää komentorivillä:
./a.exe
Ohjelman voi käynnistää myös työpöydältä.
Edellä asennetun kääntäjän kanssa voi käyttää esimerkiksi seuraavia kehitysympäristöjä:
Visual Studio Code on moderni ja laajennettava kehitysympäristö, ja sillä on ohjeet käyttöön GCC:n ja MinGW:n kanssa. Kun asentaa C/C++-laajennoksen, kääntäjä löytyy automaattisesti ja toimii suoraan.
Eclipse IDE on laajalti käytetty ammattilaistason kehitysympäristö, johon saa myös C++-työkalut. Oikeat valinnat C++-projektia luodessa ovat ”C++ Managed Build” ja kääntäjäksi ”MinGW GCC”, niin edellä asennettu MSYS2-ympäristö löytyy automaattisesti.
CodeLite on kevyt perusympäristö, jossa myös voi käyttää edellä asennettua kääntäjää.
Koodin voi kääntää ja ajaa seuraavilla ohjeilla myös komentoriviltä, vaikka sitä kirjoittaisi kehitysympäristöllä.
Komentorivillä ohjelman voi kääntää g++:llä esimerkiksi näin:
g++ -std=c++23 -Wall -pedantic -o ohjelma.exe koodi.cpp
Komennon alussa on käytettävä ohjelma, C++-kääntäjä g++. Viivalla alkavat merkinnät ovat vapaavalintaisia kääntäjän asetuksia: Parametri -std=c++23
käskee kääntäjän käyttää C++:n vuonna 2023 julkaistua standardia; edellisiä versioita ovat c++20 ja c++17. Parametrit -Wall
ja -pedantic
käskevät kääntäjän varoittaa mahdollisimman monista pienistäkin virheistä. Kääntäjän ilmoitukset kannattaa aina lukea tarkasti ja pyrkiä korjaamaan. Parametria -o
seuraava sana (ohjelma.exe
) kertoo, mihin tiedostoon käännetty ohjelma pitäisi tallentaa. Lopuksi tulevat käännettävien tiedostojen nimet eli tässä tapauksessa vain koodi.cpp
. Kooditiedostoja voi kääntää kerralla useammankin luettelemalla niiden kaikkien nimet.
Muita yleisiä asetuksia GCC:lle ovat -O1
ja -O2
, jotka optimoivat käännettävää ohjelmaa nopeammaksi, -g
, joka liittää ohjelman mukaan ylimääräistä tietoa lähdekoodista debuggausta eli virheiden etsintää varten, ja -s
, joka puolestaan poistaa ohjelmasta kaiken ylimääräisen tiedon, jotta ohjelmasta tulisi mahdollisimman pieni. Lisäksi erilaisia apukirjastoja liitetään parametreilla -lX
, missä X on kirjaston nimi. Esimerkiksi OpenGL liitetään Windowsissa parametrilla -lopengl32
ja Linuxissa parametrilla -lGL
.
Sekä esikäännös että varsinainen käännös ja linkitys tapahtuvat esitetyllä komennolla yhdellä kertaa.
Ohjelman voi ajaa kirjoittamalla sen nimen, ohjelma.exe
tai joskus ./ohjelma.exe
. Linuxissa ja Macissa tiedostopäätettä (.exe) ei ole tapana käyttää, mutta jos se on käännöskomennossa, sitä täytyy käyttää myös ajovaiheessa, koska se on osa ohjelman nimeä. Windowsissa taas pääte on välttämätön, jotta tiedosto tunnistetaan ohjelmaksi, mutta ajovaiheessa sitä ei ole pakko käyttää, koska Windows voi arvata sen itse.
Komentorivillä joutuu kirjoittamaan joskus pitkiä komentoja. Tätä helpottaa GNU Make (lyhyemmin vain make
), joka suorittaa Makefile-tiedostoon tallennettuja valmiita ”reseptejä”. Esimerkiksi C++-ohjelman kääntämiseksi voi tehdä seuraavan Makefile-nimisen tiedoston:
ohjelma.exe: koodi.cpp toinen.cpp g++ -std=c++23 -Wall -pedantic -o $@ $^
Tässä reseptissä kerrotaan, että ohjelma.exe
tehdään tiedostoista koodi.cpp
ja toinen.cpp
. Seuraavalla rivillä tabulaattorin jälkeen tulee komento. Käännöskomennossa $@ korvautuu kohteen nimellä (ohjelma.exe
) ja $^ korvautuu lähdetiedostojen nimillä (koodi.cpp
ja toinen.cpp
).
Makefile-tiedoston ensimmäisen reseptin voi suorittaa lyhyellä komennolla:
make
Jos tiedostossa on useampia reseptejä, niitä voi suorittaa nimen mukaan:
make ohjelma.exe
Näillä vinkeillä pitäisi päästä C++-ohjelmoinnissa alkuun. Tarvittaessa voi kysyä neuvoa keskustelussa.
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.