Я просто изучаю несколько иной способ использования вложенных функций. Как подход к «ленивой оценке» в C.
Представьте себе такой код:
void vars()
{
bool b0 = code0; // do something expensive or to ugly to put into if statement
bool b1 = code1;
if (b0) do_something0();
else if (b1) do_something1();
}
против
void funcs()
{
bool b0() { return code0; }
bool b1() { return code1; }
if (b0()) do_something0();
else if (b1()) do_something1();
}
Таким образом, вы получите ясность (ну, это может немного смущать, когда вы видите такой код в первый раз), в то время как код все еще выполняется тогда и только при необходимости.
В то же время довольно просто преобразовать его в исходную версию.
Здесь возникает одна проблема, если одно и то же «значение» используется несколько раз. GCC удалось оптимизировать до единственного «вызова», когда все значения известны во время компиляции, но я думаю, что это не сработает для нетривиальных вызовов функций или около того. В этом случае можно использовать «кеширование», но это увеличивает нечитаемость.