Я посмотрел на вопрос ниже, чтобы проверить, можно ли определить функции внутри функций.
Можем ли мы иметь функции внутри функций?
Принятый ответ говорит, что это НЕТ. Я попробовал это и получил тот же результат.
Но когда я попытался скомпилировать приведенный ниже код (только объявление), он компилируется.
Я не совсем уверен, почему это разрешено.
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int a, *b, f(int c); //trying out multiple name declaration
int f(int c);
}
C ++: Почему объявление функции разрешено внутри другой функции, но не в определении функции?
Поскольку стандарт говорит так (или не запрещает это явно). Примечание: то же самое относится к объявлению глобальных переменных в пределах блока.
Вы можете спросить, почему стандартный комитет не запретил это? Не все обоснования для каждого правила, и особенно отсутствие гипотетических правил, стандарта документированы, но я могу предположить в этом случае.
Следует понимать, что C ++ изначально был построен на языке C, и совместимость с C была высоким приоритетом во время стандартизации (и я верю, что так и есть). Итак, я чувствую себя довольно уверенно, говоря, что объявления функций (и глобальных переменных) разрешены в рамках блока в C ++, потому что они разрешены в C.
Почему объявления функций разрешены в C, спросите вы также. Насколько я знаю, использование объявлений функций блочной области видимости сократилось в современном C, и это пережиток дней до стандартизации. Вероятно, мы можем продолжить языковое наследие до языка B. Я не знаю много о себе, но пример кода в википедии случается, имеет объявление функции области видимости блока.
Других решений пока нет …