V teorii kompilátoru je eliminace nedosažitelného kódu optimalizací , která odstraňuje nedosažitelný kód , tedy kód, který je obsažen v programu, ale z nějakého důvodu není nikdy spuštěn [1] . V grafu toku řízení programu je tento kód obsažen v uzlech, které jsou z počátečního uzlu nedosažitelné [2] . Samotná konverze nemá přímý vliv na rychlost provádění programu, protože smazané instrukce se stejně nikdy nevykonají a nezabírají čas procesoru ; má ale nepřímý pozitivní vliv, snižuje tlak na instrukční cache a rozšiřuje možnosti pro následné optimalizace, které pracují s grafem řídicího toku [1] .
Zvažte následující příklad C :
int foo ( int a ) { int b ; b = a << 2 ; návrat b ; b = 47 ; /* Nedosažitelný kód */ návrat 0 ; /* Nedosažitelný kód */ }V tomto příkladu jsou operace přiřazení b = 47a následné ukončení procedury nedosažitelným kódem, protože k němu dochází po bezpodmínečném návratu z procedury. Poté, co optimalizace odstraní uvedené operace, dostaneme:
int foo ( int a ) { int b ; b = a << 2 ; návrat b ; }Běžnou praxí při ladění programů je dočasné zablokování části kódu [3] . To se obvykle provádí komentářem této části kódu (což je často obtížné kvůli přítomnosti dalších komentářů v programu) nebo direktivami preprocesoru (v C / C++#if 0 to jsou ... direktivy #endif). Použití odstranění nedosažitelného kódu může sloužit jako alternativa k vypnutí kódu pomocí preprocesoru. Zvažte následující příklad Java :
public static int Ukázka () { int a = 5 ; int b = 6 ; int c ; c = a + b _ if ( false ) { /* DEBUG */ System . ven . formát ( "%d" , c ); } return c ; }Kód uvnitř příkazu ifnelze provést, protože je nedosažitelný a optimalizací bude zcela odstraněn.