Ero sivun ”Cppcheck” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
<syntaxhighlight>
(Ak: Uusi sivu: {{ Ohjelma | nimi=Cppcheck | kuva= | kuvateksti= | lisenssi=GPL| käyttöliittymä=teksti | kotisivu=[http://cppcheck.wiki.sourceforge.net/] }} Cppcheck on ohjelmointityökalu, ...) |
p (<syntaxhighlight>) |
||
(5 välissä olevaa versiota 4 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
{{ Ohjelma | nimi=Cppcheck | {{Ohjelma | ||
| nimi=Cppcheck | |||
| kuva= | |||
| kuvateksti= | |||
| lisenssi=[[GPL]] | |||
| käyttöliittymä=teksti | |||
| kotisivu=[http://cppcheck.sourceforge.net/ cppcheck.sourceforge.net] | |||
}} | |||
Cppcheck on | '''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 avoimen lähdekoodin | Cppcheck on esimerkiksi löytänyt 21 varmistettua ja korjattua bugia Linuxin [[ydin|ytimestä]] ja monia muita muista tunnetuista avoimen lähdekoodin projekteista. | ||
== Käyttö == | == Käyttö == | ||
cppcheck tarkistettava_hakemisto/ | 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. | Tämän jälkeen tulostuu tilannetietoa siitä mitä tiedostoa tarkistetaan ja väliin tulostuu virheitä jos niitä löytyy. | ||
== Esimerkki == | == Esimerkki == | ||
< | Tutkitaan seuraavaa ohjelmaa Cppcheckillä: | ||
int | <syntaxhighlight lang="c++"> | ||
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; | |||
} | } | ||
</ | </syntaxhighlight> | ||
Cppcheck:n tulostus: | Cppcheck:n tulostus: | ||
<pre><nowiki> | <pre><nowiki> | ||
$ ./cppcheck a.c | $ ./cppcheck a.c | ||
Checking | $ ./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 | |||
</nowiki></pre> | </nowiki></pre> | ||
Korjattu lähdekoodi: | Korjattu lähdekoodi: | ||
< | <syntaxhighlight lang="c++"> | ||
void f( std::list<int> foo, std::list<int> bar ) | |||
int | |||
{ | { | ||
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; | |||
} | } | ||
</ | </syntaxhighlight> | ||
== Aiheesta muualla == | == Aiheesta muualla == | ||
Rivi 52: | 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]] |