Вложенные функции в C - Best Practices - PullRequest
2 голосов
/ 18 марта 2010

Я только что понял, что функция может быть определена внутри другой функции в C:

void main(){
  int foo(){ return 2; };
  printf("%d\n", foo());
}

Помимо того, что это аккуратный трюк, полезно то, что внутренняя функция является частной по отношению к внешней функции. Но ... это достаточно веская причина, чтобы сделать это в "реальном" приложении? Каковы лучшие практики для использования этого синтаксиса?

Ответы [ 4 ]

14 голосов
/ 18 марта 2010

Вложенные функции являются нестандартным расширением, реализованным GCC (и, возможно, другими, о которых я не знаю). Поскольку он не соответствует стандарту, лучшие практики, вероятно, включают , а не , используя его в коде, который вы собираетесь переносить.

Если ваша конечная цель - иметь «частные» функции в C, то вам лучше использовать отдельные файлы и делать «частные» функции статичными, чтобы они не были связаны с другими объектными файлами.

1 голос
/ 18 марта 2010

Если вы пишете компилятор, который переводит Pascal (который позволяет вложенные процедуры) в C и использует GCC для преобразования результата в двоичный файл, то эта функциональность, безусловно, полезна.

1 голос
/ 18 марта 2010

Я думаю, что это расширение компилятора, а не часть самой спецификации C

см .: http://discuss.joelonsoftware.com/default.asp?interview.11.431470.11

0 голосов
/ 19 марта 2010

Если я правильно помню, встроенные функции имеют видимость символов своих родительских функций. В некоторых случаях, может быть, это может быть полезно, чтобы избежать глобальных переменных (помочь с безопасностью потоков?). Поскольку эта функция специфична для GCC, я постараюсь ее избежать, если она мне действительно не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...