Chybový kód ( angl. Error code ) v programování je číslo (nebo kombinace písmena a čísla), které odpovídá konkrétnímu problému v programu . Chybové kódy se používají k identifikaci nesprávné činnosti hardwaru a softwaru, nesprávného zadání uživatele bez zpracování výsledné výjimky v kódu programu, i když někdy se chybové kódy používají v kombinaci se zpracováním výjimek . Chybové kódy by neměly být zaměňovány s návratovými kódy , i když se často používají společně při zpracování chyb. Některé z nejzávažnějších chybových kódů, se kterými se mohou uživatelé setkat, jsou kódy modré obrazovky smrti operačního systému Microsoft Windows .
V programovacích jazycích, které postrádají mechanismus zpracování výjimek (jako je C ), jsou chybové kódy často uloženy jako globální proměnné s názvy jako errno. Chybové kódy jsou obvykle označeny čísly, z nichž každé označuje určitou výjimku. V aplikaci, která používá chybové kódy, každá funkce obvykle definuje jeden návratový kód, který označuje chybu obecného významu. Vzhledem k tomuto obecnému návratovému kódu může programátor prozkoumat hodnotu nalezenou v globálním chybovém kódu a určit podmínky, které způsobily výskyt výjimky. Například při neúspěšném pokusu o otevření souboru může funkce nastavit globální kód chyby označující důvod chyby a vrátit ukazatel na neplatný soubor. Následující příklad ukazuje, jak lze kód chyby použít k popisu příčiny chyby:
/* pokus o otevření souboru pro čtení */ FILE * fp = fopen ( "název souboru" , "r" ); /* pokud soubor nelze otevřít, vytiskne číslo chyby a zprávu */ if ( fp == NULL ){ printf ( "Nelze otevřít soubor, chyba %d, %s \n " , errno , strerror ( errno )); /* Alternativně lze použít perror(), který poskytuje stejnou funkcionalitu */ chyba ( "Nelze otevřít soubor" ); }Protože chybové kódy jsou obvykle globální proměnné, lze k nim přistupovat odkudkoli v programu. Stejně jako u jiných globálních proměnných může být tento snadný přístup zdrojem problémů ve vícevláknovém prostředí. Vzhledem k tomu, že více vláken může zapisovat do globálních proměnných současně, může to vést ke sporu. K vyřešení tohoto problému definuje POSIX proměnnou errnojako lokální proměnnou podprocesu.