En felkod ( eng. Error code ) i programmering är en siffra (eller en kombination av en bokstav och en siffra) som motsvarar ett specifikt problem i programmet . Felkoder används för att identifiera felaktig användning av hårdvara och mjukvara, felaktig användarinmatning utan att hantera det resulterande undantaget i programkoden, även om ibland felkoder används i kombination med undantagshantering . Felkoder ska inte förväxlas med returkoder , även om de ofta används tillsammans vid felhantering. Några av de allvarligaste felkoderna som användare kan stöta på är Blue Screen of Death -koderna i Microsoft Windows operativsystem .
I programmeringsspråk som saknar en mekanism för hantering av undantag (som C ) lagras ofta felkoder som globala variabler med namn som errno. Felkoder betecknas vanligtvis med siffror, som var och en identifierar ett specifikt undantag. I en applikation som använder felkoder definierar varje funktion vanligtvis en returkod som indikerar ett fel av allmän betydelse. Med tanke på denna generiska returkod kan programmeraren undersöka värdet som finns i den globala felkoden för att fastställa villkoren som orsakade undantaget. Till exempel, vid ett misslyckat försök att öppna en fil, kan funktionen ställa in en global felkod som anger orsaken till felet och returnera en ogiltig filpekare. Följande exempel visar hur en felkod kan användas för att beskriva orsaken till ett fel:
/* försök att öppna filen för läsning */ FIL * fp = fopen ( "filnamn" , "r" ); /* om filen inte kan öppnas, skriv ut felnummer och meddelande */ if ( fp == NULL ){ printf ( "Kan inte öppna filen, fel %d, %s \n " , errno , strerror ( errno )); /* Alternativt kan perror() användas, vilket ger samma funktionalitet */ perror ( "Kan inte öppna filen" ); }Eftersom felkoder vanligtvis är globala variabler kan de nås från var som helst i programmet. Som med andra globala variabler kan denna lätta åtkomst vara en källa till problem i en miljö med flera trådar . Eftersom flera trådar kan skriva till globala variabler samtidigt, kan detta leda till ett rastillstånd. För att lösa detta problem definierar POSIX en variabel errnosom en trådlokal variabel.