Ero sivun ”Cppcheck” versioiden välillä
Siirry navigaatioon
Siirry hakuun
(typo) |
p (<syntaxhighlight>) |
||
(2 välissä olevaa versiota 2 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
{{ Ohjelma | nimi=Cppcheck | {{Ohjelma | ||
Cppcheck on vapaa ohjelmointityökalu, jolla voi etsiä virheitä C- ja C++-ohjelmien lähdekoodista staattisesti. Yleisimmät Cppcheckin löytämät virheet ovat yhden funktion sisällä tapahtuvat muistivuodot, mutta sillä voi etsiä myös monia muita tyypillisiä virheitä. | | nimi=Cppcheck | ||
| kuva= | |||
| kuvateksti= | |||
| lisenssi=[[GPL]] | |||
| käyttöliittymä=teksti | |||
| kotisivu=[http://cppcheck.sourceforge.net/ cppcheck.sourceforge.net] | |||
}} | |||
'''Cppcheck''' on vapaa ohjelmointityökalu, jolla voi etsiä virheitä C- ja C++-ohjelmien lähdekoodista staattisesti. Yleisimmät Cppcheckin löytämät virheet ovat yhden funktion sisällä tapahtuvat muistivuodot, mutta sillä voi etsiä myös monia muita tyypillisiä virheitä. | |||
Cppcheck on esimerkiksi löytänyt 21 varmistettua ja korjattua bugia Linuxin [[ydin|ytimestä]] ja monia muita muista tunnetuista avoimen lähdekoodin projekteista. | Cppcheck on esimerkiksi löytänyt 21 varmistettua ja korjattua bugia Linuxin [[ydin|ytimestä]] ja monia muita muista tunnetuista avoimen lähdekoodin projekteista. | ||
Rivi 13: | Rivi 21: | ||
== Esimerkki == | == Esimerkki == | ||
Tutkitaan seuraavaa ohjelmaa Cppcheckillä: | Tutkitaan seuraavaa ohjelmaa Cppcheckillä: | ||
< | |||
<syntaxhighlight lang="c++"> | |||
void f( std::list<int> foo, std::list<int> bar ) | void f( std::list<int> foo, std::list<int> bar ) | ||
{ | { | ||
Rivi 27: | Rivi 36: | ||
} | } | ||
</ | </syntaxhighlight> | ||
Cppcheck:n tulostus: | Cppcheck:n tulostus: | ||
Rivi 39: | Rivi 48: | ||
Korjattu lähdekoodi: | Korjattu lähdekoodi: | ||
< | <syntaxhighlight lang="c++"> | ||
void f( std::list<int> foo, std::list<int> bar ) | void f( std::list<int> foo, std::list<int> bar ) | ||
{ | { | ||
Rivi 53: | Rivi 62: | ||
} | } | ||
</ | </syntaxhighlight> | ||
== Aiheesta muualla == | == Aiheesta muualla == | ||
Rivi 59: | Rivi 68: | ||
*[https://sourceforge.net/projects/cppcheck Projektisivu] | *[https://sourceforge.net/projects/cppcheck Projektisivu] | ||
*[http://en.wikipedia.org/wiki/Cppcheck Englanninkielinen Wikipedia-sivu] | *[http://en.wikipedia.org/wiki/Cppcheck Englanninkielinen Wikipedia-sivu] | ||
== Katso myös == | == Katso myös == | ||
*[[Valgrind]] | *[[Valgrind]] | ||
[[Luokka:Kehitystyökalut]] | [[Luokka:Kehitystyökalut]] |
Nykyinen versio 18. helmikuuta 2022 kello 09.31
Cppcheck | |
---|---|
Käyttöliittymä | teksti |
Lisenssi | GPL |
Kotisivu | cppcheck.sourceforge.net |
Cppcheck on vapaa ohjelmointityökalu, jolla voi etsiä virheitä C- ja C++-ohjelmien lähdekoodista staattisesti. Yleisimmät Cppcheckin löytämät virheet ovat yhden funktion sisällä tapahtuvat muistivuodot, mutta sillä voi etsiä myös monia muita tyypillisiä virheitä.
Cppcheck on esimerkiksi löytänyt 21 varmistettua ja korjattua bugia Linuxin ytimestä ja monia muita muista tunnetuista avoimen lähdekoodin projekteista.
Käyttö[muokkaa]
cppcheck tarkistettava_hakemisto/
tai
cppcheck tarkistettava_tiedosto.cpp
Tämän jälkeen tulostuu tilannetietoa siitä mitä tiedostoa tarkistetaan ja väliin tulostuu virheitä jos niitä löytyy.
Esimerkki[muokkaa]
Tutkitaan seuraavaa ohjelmaa Cppcheckillä:
void f( std::list<int> foo, std::list<int> bar )
{
char *del = new char[10];
std::list<int>::const_iterator it;
for (it = foo.begin(); it != bar.end(); ++it)
{
bar.push_back( *it );
}
delete [] del;
del[3] = 0;
}
Cppcheck:n tulostus:
$ ./cppcheck a.c $ ./cppcheck example.cpp Checking example.cpp... [example.cpp:11]: (error) Using 'del' after it is deallocated / released [example.cpp:5]: (error) Same iterator is used with both foo and bar
Korjattu lähdekoodi:
void f( std::list<int> foo, std::list<int> bar )
{
char *del = new char[10];
std::list<int>::const_iterator it;
for (it = foo.begin(); it != foo.end(); ++it)
{
bar.push_back( *it );
}
del[3] = 0;
delete [] del;
}