Вложенные функции - это плохо в gcc? - PullRequest
20 голосов
/ 28 мая 2010

Я знаю, что вложенные функции не являются частью стандартного C, но, поскольку они присутствуют в gcc (и тот факт, что gcc - единственный компилятор, который меня волнует), я склонен использовать их довольно часто.

Это плохо? Если да, не могли бы вы показать мне несколько неприятных примеров? Каков статус вложенных функций в gcc? Они собираются быть удалены?

Ответы [ 11 ]

0 голосов
/ 29 октября 2011

Я просто изучаю несколько иной способ использования вложенных функций. Как подход к «ленивой оценке» в 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 удалось оптимизировать до единственного «вызова», когда все значения известны во время компиляции, но я думаю, что это не сработает для нетривиальных вызовов функций или около того. В этом случае можно использовать «кеширование», но это увеличивает нечитаемость.

...