Muokataan sivua Cppcheck

Siirry navigaatioon Siirry hakuun
Varoitus: Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos kirjaudut sisään tai luot tunnuksen, muokkauksesi yhdistetään käyttäjänimeesi ja saat paremman käyttökokemuksen.

Kumoaminen voidaan suorittaa. Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen julkaise alla näkyvät muutokset.

Nykyinen versio Oma tekstisi
Rivi 1: Rivi 1:
{{Ohjelma
{{ Ohjelma | nimi=Cppcheck | kuva= | kuvateksti= | lisenssi=[[GPL]]| käyttöliittymä=teksti | kotisivu=[http://cppcheck.wiki.sourceforge.net/] }}
| nimi=Cppcheck
Cppcheck on ohjelmointityökalu, millä voi etsiä virheitä C ja C++ ohjelmien lähdekoodista staattisesti. Yleisimmät virheet mitä Cppcheck löytää ovat yhden funktion sisällä tapahtuvat muistivuodot, mutta sillä voi etsiä myös monia muita tyypillisiä virheitä.
| 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 löytänyt 20 varmistettua ja korjattua bugia Linuxin kernelistä 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.  
Cppcheck on avoimen lähdekoodin projekti ja se on GPL lisenssin alainen. Se on kirjoitettu C++:lla ja sen sivuja ylläpitää Sourceforge.net.


== 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ä:
<source lang="c">
 
#include <stdlib.h>
<syntaxhighlight lang="c++">
int main()
void f( std::list<int> foo, std::list<int> bar )
{
{
   char *del = new char[10];
   int *a;
   std::list<int>::const_iterator it;
  char b[2];
  for (it = foo.begin(); it != bar.end(); ++it)
   a = malloc(100);
  {
   b[4] = 0;
    bar.push_back( *it );
   return 0;
   }
  delete [] del;
   del[3] = 0;
}
}


</syntaxhighlight>
</source>


Cppcheck:n tulostus:
Cppcheck:n tulostus:
<pre><nowiki>
<pre><nowiki>
$ ./cppcheck a.c
$ ./cppcheck a.c
$ ./cppcheck example.cpp
Checking a.c...
Checking example.cpp...
[a.c:8]: Memory leak: a
[example.cpp:11]: (error) Using 'del' after it is deallocated / released
[a.c:7]: Array index out of bounds
[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++">
<source lang="c">
void f( std::list<int> foo, std::list<int> bar )
#include <stdlib.h>
int main()
{
{
   char *del = new char[10];
   int *a;
   std::list<int>::const_iterator it;
  char b[5];
  for (it = foo.begin(); it != foo.end(); ++it)
   a = malloc(100);
   {
  b[4] = 0;
    bar.push_back( *it );
   free( a );
   }
   return 0;
  del[3] = 0
  delete [] del;
}
}


</syntaxhighlight>
</source>


== Aiheesta muualla ==
== Aiheesta muualla ==
Rivi 68: Rivi 52:
*[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]]
Wikin materiaali on kaikkien vapaasti käytettävissä Creative Commons 3.0 - nimi mainittava -lisenssin alaisuudessa. TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!

Muokataksesi tätä sivua vastaa alla olevaan kysymykseen (lisätietoja):

Peruuta Muokkausohjeet (avautuu uuteen ikkunaan)

Tällä sivulla käytetty malline:

Tämä sivu kuuluu seuraavaan piilotettuun luokkaan:

Noudettu kohteesta ”https://www.linux.fi/wiki/Cppcheck