#c #function #prototype
#c #Функция #Прототип
Вопрос:
При объявлении прототипа функции в C есть ли разница между следующим:
void SomeFunction( int Argument )
{
//Stuff
}
В сравнении
void SomeFunction( int )
{
//Stuff
}
По сути, я спрашиваю, почему вы пишете имя аргумента переменной в прототипе функции, а не просто тип данных?
Ответ №1:
Имена аргументов не нужны компилятору в объявлениях функций. Это для потребления человеком. Они предоставляют дополнительную информацию о том, что делает функция. Хорошие имена функций в сочетании с хорошими именами аргументов служат мгновенной документацией для вашего метода.
Ответ №2:
Вам нужно имя аргумента, если вы действительно собираетесь использовать аргумент. Некоторые компиляторы (например, Microsoft VC ) выдадут вам предупреждение, если вы назовете аргумент, но не используете его нигде в функции.
PS То, что вы использовали в своем примере, является не прототипом, а фактическим определением функции. В прототипе имя аргумента является чисто необязательным.
Ответ №3:
дополнительный комментарий, касающийся разницы между «объявлением» и «определением». Оба ваших примера являются определениями:
void SomeFunction( int Argument )
{
//Stuff
}
Прототип будет декларацией и будет выглядеть следующим образом:
void SomeFunction( int ) ;
Итак, вы можете иметь в своем заголовке объявление, подобное приведенному выше. Затем в вашем cpp вы определяете функцию следующим образом:
void SomeFunction( int Argument )
{
Argument = Argument 1;
}
Как вы видите, в объявлении не указывается имя аргумента, но затем определение указывает его и использует его.
Ответ №4:
Вам не нужно указывать имя аргумента ни в определении, ни в объявлении. Если вы это сделаете, они даже не обязательно должны быть одинаковыми. Вы должны написать его, если планируете фактически использовать аргумент.
Ответ №5:
Прототипу функции не нужны имена параметров, но ему нужны типы переменных. Каждый из них действителен:
void function(int);
void function(int param);
Прототип используется, чтобы вы могли определять функции в любом порядке. Однако, если вы хотите видеть имена параметров (например, при наведении курсора мыши на функцию), имена должны быть в прототипе. Если у вас нет прототипа, вы увидите имена из определения.
Определение функции может использоваться как объявление, если прототипа нет, но оно должно быть определено до вызова функции. Конечно, будут использоваться имена переменных в определении.
Параметры должны иметь имена в определении, но в прототипах имена необязательны.