Ero sivun ”Cppcheck” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
<syntaxhighlight>
p (kh) |
p (<syntaxhighlight>) |
||
(4 välissä olevaa versiota 3 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 esimerkiksi löytänyt | '''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. | |||
== Käyttö == | == Käyttö == | ||
Rivi 13: | Rivi 21: | ||
== Esimerkki == | == Esimerkki == | ||
Tutkitaan seuraavaa ohjelmaa Cppcheckillä: | Tutkitaan seuraavaa ohjelmaa Cppcheckillä: | ||
< | |||
<syntaxhighlight lang="c++"> | |||
int | 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]] |