Что означает объем функций?

что означает область функций?

Я понимаю область переменных. Когда мы говорим о области функций, это относится к функциям внутри структур (классов) или есть область для нормальных функций, которые мы вызываем в main() программы на C / C++?

4 ответов


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


грубо говоря, a объем - область, в которой могут быть объявлены имена. Имена, объявленные в области, доступны в этой области, а в некоторых случаях и извне.

(чтобы быть педантически точным, это на самом деле декларация области и объем имя-это часть программы, в которой имя является допустимым. Он начинается там, где он объявлен, и включает в себя остальную часть этого региона, а иногда и некоторые другие регионы.)

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

большинство объектов и функций имеют имена, и каждое из этих имен находится внутри области.

таким образом," область функции " может означать две вещи: либо область, определенную телом функции, в которой объявлены ее локальные переменные; или область (либо класс, либо namespace), в котором объявляется имя функции.

UPDATE: вы говорите, что имеете в виду область имени функции. Это всегда начинается сразу после объявления; где это заканчивается, зависит от того, где это объявление было.

  • если он объявлен внутри пространства имен, он длится до тех пор, пока это пространство имен не будет закрыто. Если пространство имен будет открыто позже в той же единице перевода, оно вернется в область.
  • если он объявлен внутри класса определение функции-члена, то объем держится до конца определения класса. Он также находится в области внутри определений любых производных классов, а также внутри определений члена этого класса или производных классов.
  • если он объявлен внутри определения класса как друг или внутри определения функции, то имя фактически объявлено в окружающем пространстве имен, и область совпадает с этим случаем.

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

в C [edit: который был одним из тегов, когда я писал это], функции имеют либо глобальную область, либо область файла. Глобальная область применяется к нормальной функции, которая видна во всей программе. Область файла применяется к функции, которую вы отметили как "статическую", поэтому она отображается только в той же единице перевода.

C++ использует несколько различных имен для те, но имеет те же Основные понятия. Он добавляет пространства имен в виде вещей, фактически называемых "пространством имен" и structs/classes. За одним исключением функция в пространстве имен отображается только в этом пространстве имен. Исключение составляет, если вы определяете внутри class/struct:

class X {
    friend void whatever(X const &) { do_something(); }
};

в этом случае, даже если функция определена внутри X, его имя вводится в окружающее пространство имен, поэтому оно видно за пределами X.


Я думаю, что здесь имеется в виду сфера, в которой метки (A метка - это то, что вы используете goto заявления) видны.

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