Что такое формальный параметр?

При компиляции в C ++ я часто получаю сообщения об ошибках, связанных с «формальными параметрами», такими как

error C2719: 'b': formal parameter with __declspec(align('16')) won't be aligned

Я понимаю ошибку и тот факт, что b это параметр функции, которую я определяю.

Тем не менее, что это значит, что параметр формальный? Может ли быть неофициальный параметры как?

Я заметил, что термин «формальный параметр» встречается и в других языках, поэтому я предполагаю, что это более общий термин, не обязательно специфичный для языков C-семейства? Поддерживаются ли неформальные параметры некоторым подмножеством языков?


Увидев ответы, последний вопрос: где эти имена формальный параметр а также фактический параметр происхождение из? Происходит ли оно из стандарта C, или это эффект от того, чтобы называть его таковым в некотором абстрактном исчислении языка?

22

Решение

Есть формальный а также фактический параметры:

void foo(int arg); //arg is a formal parameter

int main()
{
int val = 1;
foo(val);  //val is an actual parameter
}

От Стандарт C ++:

1.3.1 формальный параметр (параметр)

объект или ссылка, объявленная как часть объявления функции или
определение или в предложении catch обработчика исключений, что
получает значение при входе в функцию или обработчик; идентификатор
из списка через запятую, ограниченного скобками сразу
следование имени макроса в функционально-подобном определении макроса; или
Шаблон-параметры. Параметры также известны как формальные аргументы или
формальные параметры.

1.3.10 фактический параметр (аргумент)

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

30

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

Формальные параметры — это параметры, известные при определении функции. Фактические параметры — это то, что вы на самом деле (отсюда и название) переходите к функции при ее вызове.

void foo( int a ); // a is a formal parameter

foo(10); // 10 is the actual parameter
15

Нужно быть немного педантичным по терминологии, но весьма полезным: формальные параметры — это то, что вы просто думаете о параметрах функции:

int foo(bool a, float b);

Вот a а также b являются формальными параметрами. Дело в том, что в теле функции вы ссылаетесь на эти параметры «формально», фактически не зная их значения. Это только когда ты актуален оценивать выражение вызова функции что формальные параметры функции связанный к аргументам вызова функции:

int result = foo(false, 1.5);

В этом выражении вызова значение false первого аргумента связан с формальным параметром aи аналогично для второго аргумента.

Различие между параметрами и аргументами, возможно, более важно для разработчиков языков и составителей компиляторов, но в качестве примера на C ++ может быть очень полезно разобраться с этим, когда вы пытаетесь следовать правилам вывода аргументов шаблона.

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