C ++: Почему объявление функции разрешено внутри другой функции, но не в определении функции?

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

Можем ли мы иметь функции внутри функций?

Принятый ответ говорит, что это НЕТ. Я попробовал это и получил тот же результат.

Но когда я попытался скомпилировать приведенный ниже код (только объявление), он компилируется.
Я не совсем уверен, почему это разрешено.

#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);
}

0

Решение

C ++: Почему объявление функции разрешено внутри другой функции, но не в определении функции?

Поскольку стандарт говорит так (или не запрещает это явно). Примечание: то же самое относится к объявлению глобальных переменных в пределах блока.

Вы можете спросить, почему стандартный комитет не запретил это? Не все обоснования для каждого правила, и особенно отсутствие гипотетических правил, стандарта документированы, но я могу предположить в этом случае.

Следует понимать, что C ++ изначально был построен на языке C, и совместимость с C была высоким приоритетом во время стандартизации (и я верю, что так и есть). Итак, я чувствую себя довольно уверенно, говоря, что объявления функций (и глобальных переменных) разрешены в рамках блока в C ++, потому что они разрешены в C.

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]