Какой мертвый код может удалить GCC из окончательного результата?
Мне всегда говорили, что компилятор достаточно умен, чтобы устранить мертвый код. Большая часть кода, который я пишу, содержит много информации, известной во время компиляции, но код должен быть написан в наиболее общей форме. Я не знаю ни одной сборки, поэтому не могу просмотреть созданную сборку. Какой код может быть эффективно устранен в конечном исполняемом файле?
Несколько примеров, но не ограничиваясь
f(bool b){
if(b){
//some code
}else{
//some code
}
}
f(true);
//////////////////////////
template<bool b>
f(){
if(b){
//some code
}else{
//some code
}
}
f<true>();
///////////////////////////
Что делать, если определениеf
находится в другом объективном коде и вызываемомf(true)
в основном. Будет ли оптимизация времени ссылки эффективно устранять мертвый код? Что такое стиль / опция компиляции / трюк для облегчения удаления мертвого кода?