Jaki martwy kod może wyeliminować GCC z końcowego wyniku?
Zawsze mówiono mi, że kompilator jest wystarczająco inteligentny, aby wyeliminować martwy kod. Znaczna część kodu, który piszę, ma wiele informacji znanych w czasie kompilacji, ale kod musi być napisany w najbardziej ogólnej formie. Nie znam żadnego zespołu, więc nie mogę zbadać wygenerowanego zespołu. Jaki kod można skutecznie wyeliminować w ostatecznym pliku wykonywalnym?
Kilka przykładów, ale nie tylko
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>();
///////////////////////////
Co jeśli definicjaf
jest w innym kodzie obiektywnym i w wywołanymf(true)
jest w głównym. Czy optymalizacja czasu łącza skutecznie wyeliminuje martwy kod? Jaka jest opcja / sztuczka stylu kodowania / kompilatora, aby ułatwić eliminację kodu?