У теорії компіляторівви́даленням недося́жного ко́ду (англ.unreachable code elimination) називають оптимізацію, що видаляє недосяжний код, тобто код, який міститься в програмі, але з певних причин ніколи не виконується[1]. В графі потоку управління програми цей код міститься у вузлах, недосяжних з початкового вузла[2]. Саме́ перетворення безпосередньо не впливає на швидкість виконання програми, адже видаляються інструкції, які все одно ніколи не виконуються і не займають процесорного часу; але воно надає непрямий позитивний ефект, знижуючи тиск на кеш інструкцій і розширюючи можливості подальших оптимізацій, що працюють із графом потоку керування[1].
intfoo(inta){intb;b=a<<2;returnb;b=47;/* Недостижимый код */return0;/* Недостижимый код */}
У цьому прикладі операція присвоювання b = 47 і подальший вихід із процедури є недосяжним кодом, оскільки воно відбувається після безумовного повернення з процедури. Коли під час оптимізації зазначені операції буде видалено, отримаємо:
intfoo(inta){intb;b=a<<2;returnb;}
Поширеною практикою в налагодженні програм є тимчасове відключення частини коду[3]. Зазвичай це досягається коментуванням цієї ділянки коду (що часто буває складно, через наявність у програмі інших коментарів) або директив препроцесора (в C/C++ це директиви #if 0 ... #endif). Використання видалення недосяжного коду може служити альтернативою виключенню коду за допомогою препроцесора.